imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 07.12.2002, 01:06     # 1
sanchos
::VIP::
Художник-2004
 
Аватар для sanchos
 
Регистрация: 04.11.2002
Адрес: Питер
Сообщения: 1 604

sanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэй
Unhappy Как приаттачить файл на PHP?

Сабж
Блин, мучался, мучался.... нифига Все время файло бьет на куски и он доходит не полностью.
Помогите плиз разобраться. Заранее спасибо
sanchos вне форума  
Старый 07.12.2002, 02:36     # 2
infernal
Guest
 
Сообщения: n/a

найди библиотеку для mime-types
там все очень хорошо написано
 
Старый 07.12.2002, 03:14     # 3
AA666
Junior Member
 
Аватар для AA666
 
Регистрация: 28.07.2002
Адрес: www
Сообщения: 102

AA666 Путь к славе только начался
В смысле приаттачить, download or upload? С диска или в мускл?
__________________
"640K ought to be enough for anybody." - Bill Gates, 1981.
AA666 вне форума  
Старый 07.12.2002, 10:46     # 4
Stasik
Registered User
 
Аватар для Stasik
 
Регистрация: 27.03.2002
Адрес: дома
Сообщения: 1 660

Stasik Известность не заставит себя ждатьStasik Известность не заставит себя ждать
в mime... в base64 энкодишь и пошёл
__________________
Всё будет хорошо!
Stasik вне форума  
Старый 07.12.2002, 20:41     # 5
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Если речь идет о HTTP upload'е, то нередко файлы бьются из-за отсутствия атрибута тэга form: ENCTYPE="multipart/form-data" .

Если же говорим о HTTP download, то в заголовке нужно указать Content-length, чтобы файл не обрывался раньше времени из-за плохой связи .

Вообще TCP/IP следит за целостностью передаваемой информации и можно с уверенностью утверждать, что если и бьется файл, то на одной из сторон .
RaZEr вне форума  
Старый 08.12.2002, 22:52     # 6
sanchos
::VIP::
Художник-2004
 
Аватар для sanchos
 
Регистрация: 04.11.2002
Адрес: Питер
Сообщения: 1 604

sanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэй
Имеется ввиду приаатачить файл к письму для отправки. Как мне это правильно сделать?
sanchos вне форума  
Старый 08.12.2002, 23:29     # 7
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Нужно сгенерировать правильно текст писма . Для этого нужно добавить заголовки:

Content-Type: multipart/mixed; boundary="разделитель"

"разделитель" - это простая строка . Лучше всего ренерировать произвольные строки (md5,uniqid,srand и т.д.)

Далее в тело письма добавляем строки:

разделитель
Content-Type: application/octet-stream; name="любое_имя_файла"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="любое_имя_файла"
\n\n
сам файл (кодированный base64)
разделитель

PS: Чтобы кодировать файл base64 его необходимо открыть fopen и затем кусками по 64 символа (байта) кодировать в base64 (base64_encode) .
RaZEr вне форума  
Старый 09.12.2002, 01:22     # 8
sanchos
::VIP::
Художник-2004
 
Аватар для sanchos
 
Регистрация: 04.11.2002
Адрес: Питер
Сообщения: 1 604

sanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэй
PHP код:
$filename "attached.txt";
$fd fopen($filename"r");
$data fread($fdfilesize($filename));
fclose($fd);
$boundary "b" md5(uniqid(time()));
$header "Content-Type: multipart/mixed; boundary = $boundary\n\n";
$data chunk_split(base64_encode($data));
$multipart "$boundary\n\n";
$multipart .= "Content-Type: application/octet-stream; name=\"$filename\"\n";
$multipart .= "Content-Transfer-Encoding: base64\n";
$multipart .=  "Content-Disposition: attachment; filename=\"$filename\"\n\n";
$multipart .= "$data\n\n$boundary\n\n";

$message $header "\nTest\n" $multipart
В $message правильно все постороил?

Последний раз редактировалось sanchos; 09.12.2002 в 01:25.
sanchos вне форума  
Старый 09.12.2002, 02:21     # 9
AA666
Junior Member
 
Аватар для AA666
 
Регистрация: 28.07.2002
Адрес: www
Сообщения: 102

AA666 Путь к славе только начался
PHP код:
$filename "codes.gif";
$fd fopen($filename"rb");
$size filesize($filename);
$data fread($fd$size);
fclose($fd);
$boundary "_" md5(uniqid(time()));
$header "\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"$boundary\"\nContent-Transfer-Encoding: 7bit";
$multipart "This is a MIME Encoded Message\n\n";
$multipart .= "--$boundary\n";
$multipart .= "Content-Type: image.gif\n";
$multipart .= "Content-Disposition: attachment; filename=\"$filename\"\n";
$multipart .= "Content-Transfer-Encoding: base64\n\n";
$multipart .= chunk_split(base64_encode($data));
$multipart .= "--$boundary--\n";

@
mail($mail_to"Test"$multipart"From: ".$mail_from.$header); 
только что проверил - работает
__________________
"640K ought to be enough for anybody." - Bill Gates, 1981.

Последний раз редактировалось AA666; 09.12.2002 в 10:57.
AA666 вне форума  
Старый 09.12.2002, 21:48     # 10
sanchos
::VIP::
Художник-2004
 
Аватар для sanchos
 
Регистрация: 04.11.2002
Адрес: Питер
Сообщения: 1 604

sanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэй
Да, работает и у меня. Спасибо.
Теперь еще пару вопросиков:
- Какие Content-Type существуют для каких спецификаций файла?
- Как приаттачить не один, а несколько файлов?
Спасибо
sanchos вне форума  
Старый 09.12.2002, 22:31     # 11
AA666
Junior Member
 
Аватар для AA666
 
Регистрация: 28.07.2002
Адрес: www
Сообщения: 102

AA666 Путь к славе только начался
- http://www.utoronto.ca/webdocs/HTMLd.../mimetype.html
- в цикле:
$multipart .= "--$boundary\n";
........
$multipart .= chunk_split(base64_encode($data));
__________________
"640K ought to be enough for anybody." - Bill Gates, 1981.
AA666 вне форума  
Старый 09.12.2002, 22:51     # 12
sanchos
::VIP::
Художник-2004
 
Аватар для sanchos
 
Регистрация: 04.11.2002
Адрес: Питер
Сообщения: 1 604

sanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэй
По-поводу content-type спасибо Я уже лучше доки нашел.
А вот насчет цикла... Разве еще в $header ничего добавлять не надо? Если можно, то поподробнее
Да, и еще: как вместе с приаттаченным фалом мне текст письма послать?
Пасиб за внимание
sanchos вне форума  
Старый 10.12.2002, 02:33     # 13
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Нужно приатачить текстовый файл:

-=разделитель=-
Content-Type: text/plain; charset="koi8-r"
Content-Transfer-Encoding: 8bit
\n\n
сам_текст
-=разделитель=-

Вот пример тела сообщения (всмысле параметра для функции mail) с текстом и несколькими файлами:


-=разделитель=-
Content-Type: text/plain; charset="koi8-r"
Content-Transfer-Encoding: 8bit
\n\n
сам_текст
-=разделитель=-
Content-Type: application/octet-stream; name="имя_файла1".
Content-Transfer-Encoding: base64.
Content-Disposition: attachment; filename="имя_файла1"
\n\n
тело первого файла, кодированное base64
-=разделитель=-
Content-Type: application/octet-stream; name="имя_файла2".
Content-Transfer-Encoding: base64.
Content-Disposition: attachment; filename="имя_файла2"
\n\n
тело второго файла, кодированное base64
-=разделитель=-
RaZEr вне форума  
Старый 10.12.2002, 21:17     # 14
sanchos
::VIP::
Художник-2004
 
Аватар для sanchos
 
Регистрация: 04.11.2002
Адрес: Питер
Сообщения: 1 604

sanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэй
Спасибо, это понятно. А про Header? Его оставляем прежним? Разделитель для кодированных файлов один и тот же?
sanchos вне форума  
Старый 10.12.2002, 22:09     # 15
AA666
Junior Member
 
Аватар для AA666
 
Регистрация: 28.07.2002
Адрес: www
Сообщения: 102

AA666 Путь к славе только начался
Header тот же
__________________
"640K ought to be enough for anybody." - Bill Gates, 1981.
AA666 вне форума  
Старый 10.12.2002, 22:42     # 16
sanchos
::VIP::
Художник-2004
 
Аватар для sanchos
 
Регистрация: 04.11.2002
Адрес: Питер
Сообщения: 1 604

sanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэй
Все, вроде, работает Спасибо всем
sanchos вне форума  
Старый 11.12.2002, 01:36     # 17
sanchos
::VIP::
Художник-2004
 
Аватар для sanchos
 
Регистрация: 04.11.2002
Адрес: Питер
Сообщения: 1 604

sanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэй
Блин! Опять нифига (
PHP код:
$filename "1.gif";
$fd fopen($filename"rb");
$size filesize($filename);
$data fread($fd$size);
fclose($fd);
$boundary "_" md5(uniqid(time()));
$header "\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"$boundary\"\nContent-Transfer-Encoding: 7bit\n";
$multipart "This is a MIME Encoded Message\n\n";
$multipart .= "--$boundary\n";
$multipart .= "Content-Type: text/plain; charset=\"koi8-r\"\nContent-Transfer-Encoding: 8bit\n\n";
$multipart .= "Hello, world!!!\n";
$multipart .= "--$boundary\n";
$multipart .= "Content-Type: $filename\n";
$multipart .= "Content-Disposition: attachment; filename=\"$filename\"\n";
$multipart .= "Content-Transfer-Encoding: base64\n\n";
$multipart .= chunk_split(base64_encode($data));
$multipart .= "--$boundary--\n";
$filename "2.gif";
$fd fopen($filename"rb");
$size filesize($filename);
$data fread($fd$size);
fclose($fd);
$multipart .= "Content-Type: $filename\n";
$multipart .= "Content-Disposition: attachment; filename=\"$filename\"\n";
$multipart .= "Content-Transfer-Encoding: base64\n\n";
$multipart .= chunk_split(base64_encode($data));
$multipart .= "--$boundary--\n";
mail("трум-пум-пум""Test"$multipart"From:" "тра-ля-ля" $header); 
В результате получаю письмо:
- с текстом все нормально
- файл только один - первый
- второй файл называется как первый, но показывает не изображение, а херню кодированную

Если кому не лень, разберитесь, плиз Я уже устал...
sanchos вне форума  
Старый 11.12.2002, 03:13     # 18
AA666
Junior Member
 
Аватар для AA666
 
Регистрация: 28.07.2002
Адрес: www
Сообщения: 102

AA666 Путь к славе только начался
Поменяй в середине $multipart .= "--$boundary--\n"; на $multipart .= "--$boundary\n";
два дефиса в конце должно быть только у самого последнего разделителя.
__________________
"640K ought to be enough for anybody." - Bill Gates, 1981.
AA666 вне форума  
Старый 11.12.2002, 22:13     # 19
sanchos
::VIP::
Художник-2004
 
Аватар для sanchos
 
Регистрация: 04.11.2002
Адрес: Питер
Сообщения: 1 604

sanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэйsanchos Сэнсэй
Просто скопировал не ту строчку.
Да, теперь приходит два файла, но с ними еще два... Они называются также, но в них просто полная белиберда какая-то Как с этим бороться?
sanchos вне форума  
Старый 12.12.2002, 02:29     # 20
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Честно говоря, не видя поправленного кода сложно что-либо говорить, но сразу бросается в глаза:
PHP код:
$multipart .= "Content-Type: $filename\n"
... если ты атачишь GIF, то нужно писать "image/gif", а не имя файла .
RaZEr вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


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




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.