JIEXA
Новичок
Сокеты: отправка файла и данных.
Написали с другом функцию для отправки файлов и данных через сокеты.
Вот что получилось
Вызывается так:
Но почему то не работает. Я для теста отправлял сокеты на свой локалхост, и почему-то массивы $_FILES и $_POST пустые... Вроде все правильно делали. Хотя... Жду ваших ответов дорогие программисты 
Написали с другом функцию для отправки файлов и данных через сокеты.
Вот что получилось
PHP:
<?
function sendFile($host, $port, $path, $filePath, $fileName, $fileField, $fields = array())
{
define("CRLF", "\r\n");
define("DCRLF", CRLF.CRLF);
$boundary = uniqid('------------------');
$fieldsData = "";
foreach($fields as $field => $value)
{
$fieldsData .= $boundary.CRLF;
$fieldsData .= "Content-Disposition: form-data; name=\"".$field."\"".DCRLF;
$fieldsData .= urlencode($value).CRLF;
}
$contentType = function_exists("mime_content_type") ? mime_content_type($filePath) : "application/octet-stream";
$fileHeaders = $boundary.CRLF;
$fileHeaders .= "Content-Disposition: form-data; name=\"".$fileField."\"; filename=\"".$fileName."\"".CRLF;
$fileHeaders .= "Content-Type: ".$contentType.DCRLF;
$fileHeadersTail = CRLF.$boundary."--".CRLF.CRLF;
$contentLength = strlen($fieldsData) + strlen($fileHeaders) + filesize($filePath) + strlen($fileHeadersTail);
$headers = "POST $path HTTP/1.1".CRLF;
$headers .= "Host: ".$host.CRLF;
$headers .= "Connection: Close".CRLF;
$headers .= "Pragama: no-cache".CRLF;
$headers .= "Cache-Control: no-cache".CRLF;
$headers .= "Accept: */*".CRLF;
$headers .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7".CRLF;
$headers .= "Referer: ".$host.CRLF;
$headers .= "Content-type: multipart/form-data; boundary=".$boundary.CRLF;
$headers .= "Content-length: ".$contentLength.CRLF.CRLF;
$headers .= $fieldsData;
$headers .= $fileHeaders;
$fp = fsockopen($host, $port);
//$fp = fopen("output.txt", "w");
fputs($fp, $headers);
$fp2 = fopen($filePath, "rb");
while(!feof($fp2)) fputs($fp, fgets($fp2, 4096));
fclose($fp2);
fputs($fp, $fileHeadersTail);
$serverResponse = "";
while(!feof($fp)) $serverResponse .= fgets($fp, 4096);
fclose($fp);
return $serverResponse;
}
?>
PHP:
<?
print sendFile("sitename.ru", 80, "/read.php", "./probe.txt", "probe.txt",
"filecontent", array("mirror" => "on"));
?>
