|
Примеры скриптов на PHP |
|
Вернуться в примеры скриптов
Скрипт, отправляющий файлы методом POST
Скрипт передачи файлов методом POST предоставлен Арсеньевым Алексеем (больше известным на нашем форуме как JIEXA).
<?
# (c) Арсеньев Алексей(php-jiexa@mail.ru) & Vyrus
# $host - Удаленный хост
# $port - Порт на удалённом хосте
# $path - Путь до страницы, которая принимает файл
# $filePath - Путь до файла, который отсылаем
# $fileField - Имя поля file на удаленном хосте
# $fields - Дополнительные поля. Пример array("email" => "php-jiexa@mail.ru");
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 и т.п. Вот ещё несколько ссылок на темы форума, которые
демонстрируют различные приёмы передачи данных методом POST без использования HTML-форм
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1879
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=8931
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=9050
http://www.softtime.ru/forum/read.php?id_forum=2&id_theme=12734
|