HTTP-файл передачи с сервера на сервер

с формами html мы можем загрузить файл с клиента на сервер с enctype = "multipart / form-data", input type = "file" и так далее.

Есть ли способ иметь файл уже на сервере и передавать его на другой сервер одинаково?

Спасибо за подсказки.

// Вау! Это самый быстрый вопрос, который отвечает на страницу, которую я когда-либо видел!

Когда браузер загружает файл на сервер, он отправляет запрос HTTP POST, содержащий содержимое файла.

Вы повторите это.

С PHP самое простое (или, по крайней мере, наиболее часто используемое) решение, вероятно, должно работать с curl .

Если вы посмотрите на список параметров, которые вы можете установить с помощью curl_setopt , вы увидите следующее: CURLOPT_POSTFIELDS (цитирование) :

Полные данные для отправки в HTTP-режиме «POST».
Чтобы опубликовать файл, добавьте имя файла с помощью @ и используйте полный путь .
Это может быть либо передано как строка с urlencoded, как «para1 = val1 & para2 = val2 & …», или как массив с именем поля в качестве ключа и данных поля как значение.
Если значением является массив, заголовок Content-Type будет установлен в multipart / form-data.

Не проверено, но я полагаю, что что-то вроде этого должно сделать трюк – или, по крайней мере, помочь вам начать работу:

 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://www.example.com/your-destination-script.php"); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, array( 'file' => '@/..../file.jpg', // you'll have to change the name, here, I suppose // some other fields ? )); $result = curl_exec($ch); curl_close($ch); 

В принципе, вы:

  • используют завиток
  • необходимо установить целевой URL
  • укажите, хотите ли curl_exec вернуть результат, а не выводить его
  • используют POST , а не GET
  • публикуют некоторые данные, включая файл – отмечают @ перед файлом.

вы можете сделать это таким же образом. На этот раз ваш сервер, который первым получил файл, это клиент, а второй сервер – ваш сервер. Попробуйте использовать:

Для веб-страницы второго сервера:

  <form> <input type="text" name="var1" /> <input type="text" name="var2" /> <input type="file" name="inputname" /> <input type="submit" /> </form> 

И как скрипт для отправки файла на первый сервер:

 <?php function PostToHost($host, $port, $path, $postdata, $filedata) { $data = ""; $boundary = "---------------------".substr(md5(rand(0,32000)),0,10); $fp = fsockopen($host, $port); fputs($fp, "POST $path HTTP/1.0\n"); fputs($fp, "Host: $host\n"); fputs($fp, "Content-type: multipart/form-data; boundary=".$boundary."\n"); // Ab dieser Stelle sammeln wir erstmal alle Daten in einem String // Sammeln der POST Daten foreach($postdata as $key => $val){ $data .= "--$boundary\n"; $data .= "Content-Disposition: form-data; name=\"".$key."\"\n\n".$val."\n"; } $data .= "--$boundary\n"; // Sammeln der FILE Daten $data .= "Content-Disposition: form-data; name=\"{$filedata[0]}\"; filename=\"{$filedata[1]}\"\n"; $data .= "Content-Type: image/jpeg\n"; $data .= "Content-Transfer-Encoding: binary\n\n"; $data .= $filedata[2]."\n"; $data .= "--$boundary--\n"; // Senden aller Informationen fputs($fp, "Content-length: ".strlen($data)."\n\n"); fputs($fp, $data); // Auslesen der Antwort while(!feof($fp)) { $res .= fread($fp, 1); } fclose($fp); return $res; } $postdata = array('var1'=>'test', 'var2'=>'test'); $data = file_get_contents('Signatur.jpg'); $filedata = array('inputname', 'filename.jpg', $data); echo PostToHost ("localhost", 80, "/test3.php", $postdata, $filedata); ?> 

Оба сценария берутся здесь: http://www.coder-wiki.de/HowTos/PHP-POST-Request-Datei

FTP, вероятно, лучший выбор, чем HTTP, если серверы находятся под вашим контролем.

Ex. если у вас есть файл mypicture.gif на сервере A и вы хотите отправить его на сервер B, вы можете использовать CURL.

  1. Сервер A считывает содержимое в виде строки.
  2. Отправьте строку с CURL на сервер B
  3. Сервер B извлекает String и сохраняет его как файл mypictyre-copy.gif

См. http://php.net/manual/en/book.curl.php

Некоторые примеры кода PHP:

 <?php $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_VERBOSE, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible;)"); curl_setopt($ch, CURLOPT_URL, _VIRUS_SCAN_URL); curl_setopt($ch, CURLOPT_POST, true); // same as <input type="file" name="file_box"> $post = array( "file_box"=>"@/path/to/myfile.jpg", ); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); $response = curl_exec($ch); ?>