sunucudan sunucuya http üzerinden dosya transferi

4 Cevap php

html formları ile biz enctype = "multipart / form-data" ile bir sunucu böylece, input type = "file" ve bir istemciden bir dosya yükleyebilirsiniz.

Sunucuda ON zaten bir dosyanız varsa ve başka bir sunucuya aynı şekilde aktarmak için bir yolu var mı?

Ipuçları için teşekkürler.

/ / WoW! Bu şimdiye kadar gördüğüm en hızlı soru cevap sayfası!

4 Cevap

Tarayıcı bir dosya sunucusu yükleme olduğunda, dosyanın içeriğini içeren bir HTTP POST istekleri gönderebilirsiniz.

Te çoğaltmak gerekir.


With PHP, the simplest (or, at least, most used) solution is probably to work with curl.

Eğer curl_setopt , görürsünüz ile seçeneklerine listesine bir göz atın eğer bu bir: CURLOPT_POSTFIELDS (quoting) :

The full data to post in a HTTP "POST" operation.
To post a file, prepend a filename with @ and use the full path.
This can either be passed as a urlencoded string like 'para1=val1&para2=val2&...' or as an array with the field name as key and field data as value.
If value is an array, the Content-Type header will be set to multipart/form-data.


Not tested, but I suppose that something like this should do the trick -- or, at least, help you get started :

$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_setpopt($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);

Temelde, sen:

  • kıvırmak kullanıyor
  • Hedef URL'yi ayarlamak zorunda
  • Eğer çıkış değil curl_exec sonuca dönmek istiyorum ve belirtmek
  • POST kullanıyorsanız ve değil GET
  • dosyanın yol önce @ not - Bir dosyaya dahil, bazı verileri yayınlıyoruz.

you can do it in the same way. Just this time your server who received the file first is the client and the second server is your server. Try using these:

Ikinci sunucu üzerinde web sayfası için:

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

Ve bir senaryo olarak ilk sunucuda dosya göndermek için:

<?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: Her iki komut buradan götüreceksin

Sunucular hem sizin kontrolünüz altında iseniz FTP, HTTP, muhtemelen daha iyi bir seçimdir.

Ör. Sunucu A mypicture.gif adında bir dosya var ve sunucu B göndermek istiyorsanız, CURL kullanabilirsiniz.

  1. Sunucu A String olarak içeriğini okur.
  2. Sunucu B CURL ile dize Gönderin
  3. Sunucu B mypictyre-copy.gif adında bir dosya olarak String ve mağazalar onu getirir

Bkz http://php.net/manual/en/book.curl.php

Bazı örnek PHP kodu:

<?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);
?>