Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   PHP (http://www.flasher.ru/forum/forumdisplay.php?f=20)
-   -   Может ли функция mail отправлять файлы ??? (http://www.flasher.ru/forum/showthread.php?t=34052)

Bednyachok 05.07.2002 21:38

Может ли функция mail отправлять файлы ???
 
Уважаемые знатоки!!!
Подскажите может ли функция mail отправлять файлы???
Короче есть простая форма отправки анкет, нужно добавить вложение файла.

Самурай 05.07.2002 23:12

да может...

Bednyachok 05.07.2002 23:18

А как это реализовать?
Я вставляю ХТМЛ тэг, который указывает расположение файла. А потом в функции майл указываю его имя как обычную переменную?

Ilya 06.07.2002 01:34

Вложений: 1
Hi !

Проще всего взять какой-нибудь готовый класс :) например стандартный MIME.class из аттача
тогда если попытаться отправить скажем file.zip будет что-то вроде
Код:

<?
$file_name = "file.zip";
$file_description = "test file";
$mail_from = "from@e-mail.com";
$mail_to = "to@e-mail.com";
$subject = "Hello!";
$message = "Just testing";
$type = "application/x-zip";
$file_pointer = fopen ($file_name, "r");
$file_contents = fread ($file_pointer, filesize ($file_name));
fclose ($file_pointer);
include "MIME.class";
$mime = new MIME_mail($mail_from, $mail_to, $subject, $message);
$mime->fattach($file_contents, $file_description, $type, $file_name);
$mime->send_mail();
?>


PS давненько что-то меня тут не было :)

Bednyachok 06.07.2002 17:25

Ув. Илья!
Привет!!!
Подсказал капитально, но вопрос требует продолжения! =)
Мне нужно что бы файл не указывался явным образом, а подставлялся с помощью <input type="file" name="file">
Подскажи пожалуйста!!!

Ilya 07.07.2002 20:23

HI !

Ну тогда можно сказать что-то вроде
Код:

<?
        if ($userfile) {
        $file_name = $HTTP_POST_FILES['userfile']['name'];
        $type = $HTTP_POST_FILES['userfile']['type'];
        $file_description = "test file";
        $mail_from = "from@e-mail.com";
        $mail_to = "to@e-mail.com";
        $subject = "Hello!";
        $message = "Just testing";
        $file_pointer = fopen ($userfile, "r");
        $file_contents = fread ($file_pointer, filesize ($userfile));
        fclose ($file_pointer);
        include "MIME.class";
        $mime = new MIME_mail($mail_from, $mail_to, $subject, $message);
        $mime->fattach($file_contents, $file_description, $type, $file_name);
        $mime->send_mail();
        echo "file send";
} else {?>
        <FORM ENCTYPE="multipart/form-data" METHOD=POST>
        <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000">
        Send this file: <INPUT NAME="userfile" TYPE="file">
        <INPUT TYPE="submit" VALUE="Send File">
        </FORM>
<?}?>

а переменные например можно не задавать, а передавать через поле ввода формы (или скрытое) :)

PS Только не советую использовать встроенную поддержку аплоада в PHP - опасно это.. Через одну такую форму сервер можно повалить по счету раз..

Bednyachok 08.07.2002 14:13

Привет!
Все равно не работает. Если мы к примеру пытаемся отправить файл autoexec.bat c диска C:\ то пишет:
Warning: fopen("\\php2","r") - Unknown error in f:\www\file.php3 on line 10
Warning: Unable to find file identifier 0 in f:\www\file.php3 on line 11
Warning: Unable to find file identifier 0 in f:\www\file.php3 on line 12

Ilya 08.07.2002 18:22

Hi !

значит просто сервер не настроен или неправильно прописана upload_tmp_dir в php.ini :)
А вообще если кто забыл, то у меня дурацкая привычка есть проверять как работает, перед тем как говорить :)

Bednyachok 09.07.2002 13:43

Привет!
Илья ну если уж начали такую тему, давай попробуем закончить =)
Что мне нужнл прописать в php.ini или какой каталог указать для upload ???
Если можешь покажи свои настройки, меня интересуют только касающиеся отправки файлов.

Еще там вот у тебя функции:
$file_pointer = fopen ($userfile, "r");
$file_contents = fread ($file_pointer, filesize ($userfile));
1. Зачем открывать файл???
2. У нас же переменная $userfile равна не какому то файлу, а полному пути к файлу, включая диски и директории.

Если не сложно, помоги пожалуйста разобраться, ну сильно уж надо сделать такую форму!!!

Ilya 09.07.2002 15:31

Hi !

Ну раз так, тогда и я не понимаю зачем что-то делать под win32 ? :) Или это не для реальных задач а только в целях изучения ? Ну а если изучения, то под windows все намного сложнее. Во первых нету родных нормальных средств отправки почты. По моему самое человеческое что можно найти это Advanced Direct Remailer, но его нужно ставить отдельно. Во вторых большинство версий php для win32 имеет массу проблем с автоматическим удалением временных файлов созданных при аплоаде, поэтому на них лучше на всякий случай вручную натравливать сначала move_uploaded_file , а потом unlink. В третьих в переменную $userfile используемую в скрипте поступает полный путь к временному файлу с довольно большой задержкой и вполне вероятен случай когда скрипт отработал получае файла, сохранил его в виде временного файла, а переменная $userfile еще пуста. И до кучи $HTTP_POST_FILES['userfile']['tmp_name'] вообще почти никогда под windows ничего не содержит, даже в самом конце работы скрипта. Под *nix подобных проблем кстати не было никогда :)
Ну а что касается php.ini, то у меня например там написано

[mail function]
SMTP = localhost;

и

file_uploads = On;
upload_tmp_dir = c:/temp;
upload_max_filesize = 1M;

это с учетом установленного ADR :)
А открываем и читаем файлпотому что нам нужно отправить по почте содержимое файла, а не путь к нему :)


Часовой пояс GMT +4, время: 10:52.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.