![]() |
Как приаттачить файл на PHP?
Сабж
Блин, мучался, мучался.... нифига :( Все время файло бьет на куски и он доходит не полностью. Помогите плиз разобраться. Заранее спасибо :) |
найди библиотеку для mime-types
там все очень хорошо написано |
В смысле приаттачить, download or upload? С диска или в мускл?
|
в mime... в base64 энкодишь и пошёл :)
|
Если речь идет о HTTP upload'е, то нередко файлы бьются из-за отсутствия атрибута тэга form: ENCTYPE="multipart/form-data" .
Если же говорим о HTTP download, то в заголовке нужно указать Content-length, чтобы файл не обрывался раньше времени из-за плохой связи . Вообще TCP/IP следит за целостностью передаваемой информации и можно с уверенностью утверждать, что если и бьется файл, то на одной из сторон . |
Имеется ввиду приаатачить файл к письму для отправки. Как мне это правильно сделать?
|
Нужно сгенерировать правильно текст писма . Для этого нужно добавить заголовки:
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) . |
PHP код:
|
PHP код:
|
Да, работает и у меня. Спасибо. :)
Теперь еще пару вопросиков: - Какие Content-Type существуют для каких спецификаций файла? - Как приаттачить не один, а несколько файлов? Спасибо :) |
- http://www.utoronto.ca/webdocs/HTMLd.../mimetype.html
- в цикле: $multipart .= "--$boundary\n"; ........ $multipart .= chunk_split(base64_encode($data)); |
По-поводу content-type спасибо :) Я уже лучше доки нашел.
А вот насчет цикла... Разве еще в $header ничего добавлять не надо? Если можно, то поподробнее :) Да, и еще: как вместе с приаттаченным фалом мне текст письма послать? Пасиб за внимание :) |
Нужно приатачить текстовый файл:
-=разделитель=- 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 -=разделитель=- |
Спасибо, это понятно. А про Header? Его оставляем прежним? Разделитель для кодированных файлов один и тот же?
|
Header тот же
|
Все, вроде, работает :) Спасибо всем :)
|
Блин! Опять нифига :((
PHP код:
- с текстом все нормально - файл только один - первый - второй файл называется как первый, но показывает не изображение, а херню кодированную :( Если кому не лень, разберитесь, плиз :( Я уже устал... |
Поменяй в середине $multipart .= "--$boundary--\n"; на $multipart .= "--$boundary\n";
два дефиса в конце должно быть только у самого последнего разделителя. |
:) Просто скопировал не ту строчку.
Да, теперь приходит два файла, но с ними еще два... Они называются также, но в них просто полная белиберда какая-то :( Как с этим бороться? |
Честно говоря, не видя поправленного кода сложно что-либо говорить, но сразу бросается в глаза:
PHP код:
|
Ох я и идиот :) Думал, что в принципе от этого ничего не изменится... Ошибался :)
Теперь все работает :))) RaZEr, AA666, Огромное Вам спасибо! |
| Часовой пояс GMT +4, время: 17:12. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.