В массиве $_FILES выдаёт не то [tmp_name]

Olgaaa

Новичок
В массиве $_FILES выдаёт не то [tmp_name]

Имя файла и тип определяет правильно при передаче другому php-шнику, а [tmp_name] нет, почему это может быть?

-~{}~ 10.10.05 08:37:

_FILES["filename"] Array
(
[name] => ris1.jpg
[type] => image/pjpeg
[tmp_name] => /home//kemerovo-info.net/tmp/php0UKlZC
[error] => 0
[size] => 721835
)

-~{}~ 10.10.05 08:37:

почему [tmp_name] не то?

-~{}~ 10.10.05 09:29:

форма передачи файла стандартная:

<form enctype='multipart/form-data' method=post action='mail_example.php'>
Отправить файл: <input name=filename type=file>
<input type=submit value='Отправить'>
</form>

по команде print_r($_FILES) в mail_example пишет

Array ( [filename] => Array ( [name] => php.jpg [type] => image/pjpeg [tmp_name] => /home//kemerovo-info.net/tmp/phpdmvrgQ [error] => 0 [size] => 13358 ) )

Люди, пожалуйста,подскажите что не так???
 

Olgaaa

Новичок
оно должно указывать на путь размещения выбранного мной файла, в данном случае c:\olga\php
 

SelenIT

IT-лунатик :)
Все так. Имя временного файла при upload'е не обязано совпадать с именем этого файла у клиента. Главное - чтобы это имя было уникальным и чтобы файл был доступен интерпретатору для чтения и последующего удаления.
 

Olgaaa

Новичок
SelenIT тогда почему этот выбранный мною файл не может отправиться на email? Вот скрипт отправки mail_example.php:

include("mail.php");
$messg = new Mail();
$messg->To("[email protected]");
$messg->From("[email protected]");
$messg->Subject("РЕКЛАМА");
$messg->Body("Здесь будет текст","WINDOWS-1251");
$messg->Attach($_FILES['filename']['tmp_name']);
$messg->Send();
echo "Отправлено сообщение";

-~{}~ 10.10.05 09:44:

на email приходит файл с названием каля-баля (например, phpT0gtvD) должно же быть назвние нормальное, и открыться принятое сообщение не может: спрашивает с помощью какой программы открыть,а должен нормально показаться прикреплённый файл
 

Фанат

oncle terrible
Команда форума
почему этот выбранный мною файл не может отправиться на email?
на email приходит файл
Милочка, вам не кажется, что эти два предложения несколько противоречат друг другу?
Нет, я понимаю, что с точки зрения женской логики тут противоречия нет, но к сожалению, программы пишут в основном мужчины, с их вульгарной формальной логикой.
Из которой следует, что если файл ПРИХОДИТ, то он и ОТПРАВЛЯЕТСЯ.
И из формальной логики следует, что имя НЕ должно быть "нормальное". поскольку методу Attach передаётся "каля-баля ", то и отправляется тоже "каля-баля". Всё совершенно логично.
 

Olgaaa

Новичок
У меня у самой голова идёт кругом от всего этого, мне надо, чтобы файл КОРРЕКТНО приходил на email, с нормальным именем, а этого я не могу сделать

-~{}~ 10.10.05 10:03:

Фанат прошу прощения я видимо сама не совсем разобралась в своей проблеме...

Файлы оказываются приходят и текстового типа и рисунки, НО
они не открываются обычным способом, тип прикреплённого файла неизвестен и система предлагает открыть его с помощью выбранной программы...только так...
А почему нормально не показывает прикреплённый файл?
 

SelenIT

IT-лунатик :)
Olgaaa
Сохрани получаемое письмо в файл, открой этот файл блокнотом и найди в нем часть, состоящую из кучи ровных строчек абракадабры (это закодированное вложение). Перед этой частью должны идти заголовки, что-то вроде
Код:
Content-Type: image/jpeg; name="phpT0gtvD"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="phpT0gtvD"
Покажи, какие заголовки получаются у тебя.
 

kvf77

Red Devil
SelenIT
что-что - ну понятно же что получается, как дети - файл без расширения у нее получается, потому что она берет [tmp_name] и не догадывается, что его можно заменить на [name]. вот и получается. и вовсе тут не надо искать скрытых смыслов.
 

Olgaaa

Новичок
SelenIT
при отправке письма вот что получается:
Отправлено сообщение:

To: [email protected]
From: [email protected]
Mime-Version: 1.0
Content-Type: multipart/mixed;
boundary="--cc5762b482b8bd5d3634f9d98fdd1a42"
Content-Transfer-Encoding: 8bit
X-Mailer: RLSP Mailer

This is a multi-part message in MIME format.
----cc5762b482b8bd5d3634f9d98fdd1a42
Content-Type: text/html; charset=windows-1251
Content-Transfer-Encoding: 8bit

Здесь будет текст
----cc5762b482b8bd5d3634f9d98fdd1a42
Content-Type: image/pjpeg;
name="phpbhEW5k";
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="phpbhEW5k"
 

SelenIT

IT-лунатик :)
kvf77
Прежде чем запостить - проверил в аутлуке. При правильном Content-Type файл без расширения нормально распознался как jpeg-картинка. Возможно, в других клиентах не так, но проверить лишний раз ИМХО не помешает...
 

Фанат

oncle terrible
Команда форума
Olgaaa
После того, как ты правильно определила проблему, у тебя есть несколько путей решения.
1. Посмотреть в документации к тому классу, которым ты отправляешь почту, нет ли у метода Attach дополнительныях параметров, в которых можно указать имя файла.
2. Если это невозможно, то можно поискать другой класс для отправки почты.
3. Если такого не найдётся, то ты можешь попробовать переименовать файл перед отправкой, с помощью функции rename()

но заголовок "РЕКЛАМА" мне всё равно не нравится...
 

Olgaaa

Новичок
kvf77
при такой замене выдаёт
Class Mail, method attach : file php.jpg can't be found
 

kvf77

Red Devil
SelenIT

ну откуда будет правильный тип контента, коли я думаю ее класс отправки почты по расширению его определяет.
 

Olgaaa

Новичок
SelenIT получается не правильно определяется Content-Type?

-~{}~ 10.10.05 10:28:

содержимон массива FILES:
$_FILES["filename"] Array
(
[name] => ris1.jpg
[type] => image/pjpeg
[tmp_name] => /home//kemerovo-info.net/tmp/php0UKlZC
[error] => 0
[size] => 721835
)


тип здесь он определили правильно "image/pjpeg", а почему [tmp_name] без расширения???
 

kvf77

Red Devil
Olgaaa

блин, девушка, вы головой можете логически мыслить? если файл у вас [tmp_name], а вы берете [name], то естетственно вам выдается file php.jpg can't be found, потому что файла с именем [name] нет, поскольку имя у него [tmp_name]. как вы думаете, что нужно сделать, чтобы появился файл с именем [name]?
 

SiMM

Новичок
> тип здесь он определили правильно "image/pjpeg"
Ну и что? Откуда ваш класс, работающий с почтой, знает, откуда приходит файл? Да ему вообще по барабану на $_FILES

> а почему [tmp_name] без расширения???
Потому что это название временного файла и оно не имеет никакого значения.

PS: сон разума порождает чудовищ...
 

Olgaaa

Новичок
Если бы я во всём хорошо разбиралась, то я бы тут не была и ни очём не спрашивала, а раз я здесь то я чего-то не понимаю, Вы можете мне нормально объяснить без БУРИ ЭМОЦИЙ?
 

Фанат

oncle terrible
Команда форума
я объяснил, в трёх пунктах.
Вы можете нормально прочитать, без БУРИ ЭМОЦИЙ?

-~{}~ 10.10.05 10:42:

SelenIT
достал ты уже со своим контент тайпом.
 
Сверху