Как да прикачите файл в PHP уеб разработка

Ако говорим за HTTP качване, тогава файловете често се повреждат поради липсата на атрибута на маркера на формуляра: ENCTYPE="multipart/form-data" .

Ако говорим за HTTP изтегляне, тогава Content-length трябва да бъде посочен в заглавката, така че файлът да не се счупи преждевременно поради лоша връзка.

Като цяло TCP / IP следи целостта на предадената информация и е безопасно да се каже, че ако файлът бие, тогава от една от страните.

Трябва да генерирате правилния текст на писмото. За да направите това, добавете заглавки:

Content-Type: multipart/mixed; граница="разделител"

"разделител" е прост низ. Най-добре е да изобразите произволни низове (md5, uniqid, srand и т.н.)

След това добавете следните редове към основния текст на имейла:

разделител Content-Type: приложение/октет-поток; name="any_file_name" Content-Transfer-Encoding: base64 Content-Disposition: прикачен файл; filename="any_file_name" \n\n самия файл (кодиран base64) разделител

PS: За да кодирате base64 файл, трябва да го отворите с fopen и след това да го кодирате на части от 64 знака (байта) в base64 (base64_encode).

$filename = "attached.txt" ; $fd = fopen ($filename, "r"); $data = fread ($fd, размер на файла ($filename)); fclose ($fd); $граница = "b" . md5(uniqid(време())); $header = "Content-Type: multipart/mixed; boundary = $boundary\n\n" ; $data = chunk_split ( base64_encode ( $data )); $multipart = "$граница\n\n" ; $multipart .= "Content-Type: application/octet-stream; name=\"$filename\"\n" ; $multipart .= "Content-Transfer-Encoding: base64\n" ; $multipart .= "Content-Disposition: прикачен файл; име на файл=\"$име на файл\"\n\n" ; $multipart .= "$данни\n\n$граница\n\n" ;

$message = $header. "\nТест\n" . $multipart ;

$filename = "codes.gif" ; $fd = fopen ($filename, "rb"); $size = размер на файла ( $filename ); $data = fread ($fd, $size); fclose ($fd); $boundary = "_" . md5 ( uniqid ( време ())); $header = "\nMIME-версия: 1.0\nContent-Type: multipart/mixed; boundary=\"$boundary\"\nContent-Transfer-Encoding: 7bit" ; $multipart = "Това е MIME кодирано съобщение\n\n" ; $multipart .= "--$граница\n" ; $multipart .= "Content-Type: image.gif\n" ; $multipart .= "Content-Disposition: прикачен файл; име на файл=\"$име на файл\"\n" ; $multipart .= "Content-Transfer-Encoding: base64\n\n" ; $multipart .= chunk_split ( base64_encode ( $data )); $multipart .= "--$граница--\n" ;

@ поща ($mail_to, "Тест", $multipart, "От: ". $mail_from. $header);

Нужно да прикачите текстовия файл:

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

Ето пример за съобщения (всички параметри за функциите на пощата) с текст и няколко файла:

-=разделител=- Content-Type: text/plain; charset="koi8-r" Content-Transfer-Encoding: 8bit \n\n сам_текст -=разделител=- Content-Type: application/octet-stream; name="имя_файла1". Кодиране на прехвърляне на съдържание: base64. Разпределение на съдържанието: прикачен файл; filename="имя_файла1" \n\n тело на първия файл, кодирано base64 -=разделител=- Content-Type: application/octet-stream; name="имя_файла2". Кодиране на прехвърляне на съдържание: base64. Разпределение на съдържанието: прикачен файл; име на файл="имя_файла2" \n\n base64 кодирано тяло на втория файл -=делимитер=-