Общая часть кода.
<?php // данные для запроса $postData = array( 'foo' => 'bar', 'hello' => 'world', 'am-i?' => 'digitorum' ); // файлы для отправки $files = array( 'mp3File' => $_SERVER['DOCUMENT_ROOT'] . '/files/html5audio-sample/Lolishit-Schoolgirl_With_Hair-Drills.mp3', 'jpgFile' => $_SERVER['DOCUMENT_ROOT'] . '/files/html5audio-sample/Lolishit_79178_5b2a2216f82b4dfb.jpg' ); // получить миме тип файла function getMimeType($filename) { if(function_exists('finfo_open')) { $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime = finfo_file($finfo, $filename); finfo_close($finfo); return $mime; } return 'application/octet-stream'; } // получить контент для запроса function getContent($postData, $files) { global $postData, $files; // "засечка" :P $boundary = md5(rand(0,32000)); // контент для отправки $content = ''; // данные для отправки foreach($postData as $key => $val) { $content .= '--' . $boundary . "\n"; $content .= 'Content-Disposition: form-data; name="' . $key . '"' . "\n\n" . $val . "\n"; } // файлы для отправки foreach($files as $key => $file) { $content .= '--' . $boundary . "\n"; $content .= 'Content-Disposition: form-data; name="' . $key . '"; filename="' . basename($file) . '"' . "\n"; $content .= 'Content-Type: ' . getMimeType($file) . "\n"; $content .= 'Content-Transfer-Encoding: binary' . "\n\n"; $content .= file_get_contents($file) . "\n"; } // завершаем контент $content .= "--$boundary--\n"; return array($boundary, $content); }
Через открытие сокета на 80-й порт.
<?php // получаем данные для запроса list($boundary, $content) = getContent($postData, $files); // формируем правильный запрос $content = 'POST /system/php/Scripts/Dev/fileReceiver-php.php HTTP/1.1' . "\n" . 'Host:' . $_SERVER['HTTP_HOST'] . "\n" . 'Content-Type: multipart/form-data; boundary=' . $boundary . "\n" . 'Content-Length: ' . strlen($content) . "\n" . 'Connection: close' . "\n\n" . $content; // ошибка подключения $errno = 0; $errstr = ''; // ответ $responce = ''; // подключаемся if(!($socket = fsockopen($_SERVER['HTTP_HOST'], 80, $errno, $errstr, 15))) { die('FAIL!'); } // отправляем данные fwrite($socket, $content); // получаем ответ while (!feof($socket)) { $responce .= fgets($socket, 128); } // закрываем соединение fclose($socket); var_export($responce);
С помощью curl.
<?php // дополняем массив с данными файлами foreach($files as $k => $file) { $postData[$k] = '@' . $file; } // создаем подключение $ch = curl_init('http://digitorum.ru/system/php/Scripts/Dev/fileReceiver-php.php'); // устанавлваем даные для отправки curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); // флаг о том, что нужно получить результат curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // отправляем запрос $response = curl_exec($ch); // закрываем соединение curl_close($ch); var_export($response);
С помошью определения context для file_get_contents().
<?php // получаем данные для запроса list($boundary, $content) = getContent($postData, $files); // отправляем запрос $responce = file_get_contents( 'http://digitorum.ru/system/php/Scripts/Dev/fileReceiver-php.php', false, stream_context_create( array( 'http' => array( 'method' => 'POST', 'header' => 'Content-Type: multipart/form-data; boundary=' . $boundary, 'content' => $content ) ) ) ); var_export($responce);