Скрипт передачи файлов методом POST предоставлен Арсеньевым Алексеем (больше известным на нашем форуме как JIEXA).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
<? # (c) Арсеньев Алексей([email protected]) & Vyrus # $host - Удаленный хост # $port - Порт на удалённом хосте # $path - Путь до страницы, которая принимает файл # $filePath - Путь до файла, который отсылаем # $fileField - Имя поля file на удаленном хосте # $fields - Дополнительные поля. Пример array("email" => "[email protected]"); function sendFile($host, $port="80", $path, $filePath, $fileName, $fileField, $fields = array()) { define("CRLF", "\r\n"); define("DCRLF", CRLF.CRLF); $boundary = "---------------------".substr(md5(rand(0,32000)),0,10); $fieldsData = ""; if(count($fields) > "0"): foreach($fields as $field => $value) { $fieldsData .= "--".$boundary.CRLF; $fieldsData .= "Content-Disposition: form-data; name=\"".$field."\"".DCRLF; $fieldsData .= urlencode($value).CRLF; } endif; $fileHeaders = "--".$boundary.CRLF; $fileHeaders .= "Content-Disposition: form-data; name=\"".$fileField."\"; filename=\"".$fileName."\"".CRLF; $fileHeaders .= "Content-Type: ".mime_content_type($filePath).DCRLF; $fileHeadersTail = CRLF."--".$boundary."--".CRLF; $filesize = filesize($filePath); $contentLength = strlen($fieldsData) + strlen($fileHeaders) + $filesize + strlen($fileHeadersTail); $headers = "POST $path HTTP/1.0".CRLF; $headers .= "Host: ".$host.CRLF; $headers .= "Referer: ".$host.CRLF; $headers .= "Content-type: multipart/form-data, boundary=".$boundary.CRLF; $headers .= "Content-length: ".$contentLength.DCRLF; $headers .= $fieldsData; $headers .= $fileHeaders; if(!$fp = fsockopen($host, $port)) return false; fputs($fp, $headers); $fp2 = fopen($filePath, "rb"); while(!feof($fp2)) fputs($fp, fgets($fp2, 1024*100)); fclose($fp2); fputs($fp, $fileHeadersTail); $serverResponse = ""; while(!feof($fp)) $serverResponse .= fgets($fp, 4096); fclose($fp); return $serverResponse; } ?> |
Передача данных методом POST, является интереснейшей задачей: часто требуется подделка имени пользовательского агента (USER_AGENT), реферера (адреса предыдущей страницы), cookie и т.п.