Forum Webscript.Ru

Программирование => PHP => Тема начата: gap от 28 Августа 2003, 19:04:42

Название: PHP: Отправка удаленного файла аттачем на еmail.
Отправлено: gap от 28 Августа 2003, 19:04:42
Имеем код:

$fileatt = "http://www.yandex.ru/logo2.gif"; // Path to the file                  
$fileatt_type = "application/octet-stream"; // File Type
$fileatt_name = "12345.gif"; // Filename that will be used for the file as the attachment

$email_from = "perl@user.ru"; // Who the email is from
$email_subject = "12"; // The Subject of the email
$email_txt = "perl@user.ru"; // Message that the email has in it

$email_to = "perl@net.ru"; // Who the email is too

$headers = "From: ".$email_from;

$file = fopen($fileatt,\'rb\');
$data = fread($file,filesize($fileatt));
fclose($file);

$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
   
$headers .= "\\nMIME-Version: 1.0\\n" .
            "Content-Type: multipart/mixed;\\n" .
            " boundary=\\"{$mime_boundary}\\"";

$email_message .= "This is a multi-part message in MIME format.\\n\\n" .
                "--{$mime_boundary}\\n" .
                "Content-Type:text/html; charset=\\"iso-8859-1\\"\\n" .
               "Content-Transfer-Encoding: 7bit\\n\\n" .
$email_message . "\\n\\n";

$data = chunk_split(base64_encode($data));

$email_message .= "--{$mime_boundary}\\n" .
                  "Content-Type: {$fileatt_type};\\n" .
                  " name=\\"{$fileatt_name}\\"\\n" .
                  //"Content-Disposition: attachment;\\n" .
                  //" filename=\\"{$fileatt_name}\\"\\n" .
                  "Content-Transfer-Encoding: base64\\n\\n" .
                 $data . "\\n\\n" .
                  "--{$mime_boundary}--\\n";

$ok = @mail($email_to, $email_subject, $email_message, $headers);

if($ok) {
echo "The file was successfully sent!";
} else {
die("Sorry but the email could not be sent. Please go back and try again!");
}
?>

Письмо отправляется, однако файл в аттаче нулевой длинны. Есть подозрение, что это из-за "filesize". Что поправить - для нормальной отправки удаленных файлов?
Название: PHP: Отправка удаленного файла аттачем на еmail.
Отправлено: AliMamed от 28 Августа 2003, 19:24:48
"удаленный файл" сервер отправить не может. он его сначала скачать должен. вот и проверь - скачивает он или хостер это дело прикрыл
Название: PHP: Отправка удаленного файла аттачем на еmail.
Отправлено: gap от 28 Августа 2003, 19:32:53
AliMamed
А как это 100% проверить?
Название: PHP: Отправка удаленного файла аттачем на еmail.
Отправлено: Croaker от 29 Августа 2003, 10:42:09
[p]is_file[/p]
Название: PHP: Отправка удаленного файла аттачем на еmail.
Отправлено: Alexandr от 29 Августа 2003, 11:51:17
Цитировать
Opmerking: This function will not work on remote files as the file to be examined must be accessible via the servers filesystem.
Название: PHP: Отправка удаленного файла аттачем на еmail.
Отправлено: Croaker от 29 Августа 2003, 11:56:15
Alexandr

Тебе ж написали, что
Цитировать
AliMamed:
"удаленный файл" сервер отправить не может. он его сначала скачать должен.


Т.е. ты сначала закачиваешь файл на сервер, потом используешь is_file, чтобы проверить - закачался он или нет, а потом отправляешь аттачем.
Название: PHP: Отправка удаленного файла аттачем на еmail.
Отправлено: Alexandr от 29 Августа 2003, 12:31:19
is_file ни как в данном случае не поможет!!!!!
Цитировать
AliMamed:
скачивает он или

нет вообще. А потом проверять длину принятых данных.... ведь скачиваешь ты не файл, а данные!!!
Название: PHP: Отправка удаленного файла аттачем на еmail.
Отправлено: Croaker от 29 Августа 2003, 12:47:25
Блин, ступил. Короче, проблема, я так полагаю в следующем:

int filesize ( string filename)

Returns the size of the file in bytes, or FALSE in case of an error.
The results of this function are cached. See clearstatcache() for more details.
This function will not work on remote files; the file to be examined must be accessible via the server\'s filesystem.


Т.е. ты не можешь считать файл
Цитировать
gap:
$data = fread($file,filesize($fileatt));


потому как filesize в данном случае  возвращает false. и fread вроде как отрабатывает, но считывает 0 байт.
Название: PHP: Отправка удаленного файла аттачем на еmail.
Отправлено: Alexandr от 29 Августа 2003, 13:01:45
Вот так вроде должно сканать:

$data=\'\';
while (!feof($file)) $data.=fread($file,128);

или так

$data = fread($file, 99999999/*заведомо бОльшее число*/);