Как отправить файл на сервер

Задача: отправить с сайта first.com на сайт second.com файл без использования формы. Для этого на сервере first.com формируем POST-запрос, который в себе содержит название и содержимое файла, который нужно передать, и посылаем на сервер second.com. На сайте second.com POST-запрос принимается, и в указанный файл пишется переданное содержимое.

Для того, чтобы передать данные методом POST, требуется сформировать строку, содержащую заголовки запроса и непосредственно сами данные. Строка, отсылаемая на сервер second.com, выглядит примерно так:

POST /getfile.php HTTP/1.1
Host: second.com
Content-type: application/x-www-form-urlencoded
Content-Length: 2501

file=image.gif&content=GIF89a%3C%00%3C%00%D5%00%00%F4...%5E%10%00%3B

Для передачи POST-запроса будем использовать сокеты:

<?php
$hostname = 'second.com';
$path = '/getfile.php';
// Устанавливаем соединение с сервером $hostname
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
// Проверяем успешность установки соединения
if (!$fp) die($errstr.' ('.$errno.')');

// Содержимое файла
$file = 'image.gif';
$f = fopen($file, 'r');
$content = fread($f, filesize($file));
fclose($f);
// Данные HTTP-запроса
$data = 'file='.urlencode($file).'&amp;content='.urlencode($content);
// Заголовок HTTP-запроса
$headers = 'POST '.$path." HTTP/1.1\r\n";
$headers .= 'Host: '.$hostname."\r\n";
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
$headers .= 'Content-Length: '.strlen($data)."\r\n\r\n";
// Отправляем HTTP-запрос серверу second.com
fwrite($fp, $headers.$data);
// Получаем ответ
$result = '';
while ( !feof($fp) ) $result .= fgets($fp, 1024);
// Закрываем соединение
fclose($fp);
// Выводим ответ в браузер
echo $result;
?>

В результате работы скрипта с сайта first.com уходит POST-запрос на сайт second.com, а именно в скрипт getfile.php, находящийся в корне сайта second.com. Скрипту getfile.php будет доступен массив $_POST, содержащий переменные file и content.

Все, что нам нужно, так это открыть на запись файл с именем $_POST['file'], и записать туда данные из переменной $_POST['content']:

<?php
$f = fopen($_POST['file'], 'w+');
fwrite($f, $_POST['content']);
fclose($f);
echo '<p>Файл получен</p>';
?>

Ссылки по теме:

Оставьте свой отзыв