PHP: отправить файл, скачанный с сервера1, post запросом на сервер2?

Итак, есть к примеру картинка на сервере1 server1.ru/file1.jpg

Необходимо отправить этот файл на сервер2 (server2.ru) POST запросом.

Как сделать это максимально быстро и легче?


Мое предложение:

Для скачивания file1.jpg используем:
$fp = @fopen('http://server1.ru/file1.jpg', &quot;rb&quot;);<br/>
 $fd = @fopen('tmp/tmp_filename', &quot;w&quot;);<br/>
 if ($fp && $fd) {<br/>
 while (!feof($fp)) {<br/>
 $st = fread($fp, 4096);<br/>
 fwrite($fd, $st);<br/>
 }<br/>
 }<br/>
 @fclose($fp);


Затем используем CURL для отправки файла tmp/tmp_filename на сервер2.


Возможно есть способ быстрее?


ps: вот было бы здорово сделать все вышеперечисленное на стороне клиента с помощью какаго-нибудь jQuery и не грузить сервер этой ерундой =)
  • Вопрос задан
  • 4492 просмотра
Пригласить эксперта
Ответы на вопрос 2
Mithgol
@Mithgol
// читаем файл
$fileString = file_get_contents('http://server1.ru/file1.jpg');

// подготавливаем POST
$params = array('http' => array(
   'method' => 'POST',
   'content' => $fileString
));
$context = stream_context_create($params);

// посылаем POST, получаем отклик
if($remote = @fopen('http://server2.ru/filesend.php', 'rb', false, $context)){
   $response = @stream_get_contents($remote);
}

Первоисточник метода: «HTTP POST from PHP, without cURL» (автор Wez Furlong, код опубликован 15 ноября 2006 г., модернизирован 23 мая 2010 г.).
Ответ написан
Интересно, что сначала упоминается два сервера и взаимодействие между ними. А в конце вспоминается про какой-то «клиент».

Может вообще не надо с этими запросами мучиться. Отдать второму серверу-рецепиенту ссылку на картинку — пусть он сам скачает. Так не будут нагружаться скрипты сервера-донора (если давать прямую ссылку на картинку), и можно на втором сервере организовать очередь закачки картинок с первого сервера, если таких картинок, одновременно загружаемых, будет очень много.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы