Скрипт, отправляющий файлы методом POST

<?

# (c) Арсеньев Алексей(Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.) & Vyrus

# $host - Удаленный хост

# $port - Порт на удалённом хосте

# $path - Путь до страницы, которая принимает файл

# $filePath - Путь до файла, который отсылаем

# $fileField - Имя поля file на удаленном хосте

# $fields - Дополнительные поля. Пример array("email" => "Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.");



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 и т.п.