10
votes

Fichier de transfert HTTP du serveur au serveur

avec des formulaires HTML, nous pouvons télécharger un fichier à partir d'un client sur un serveur avec encype = "multipart / form-données" , entrée type = "fichier" et donc au.

Y a-t-il un moyen d'avoir un fichier déjà sur le serveur et de le transférer sur un autre serveur de la même manière?

Merci pour astuces.

// wow! C'est la page de réponse la plus rapide qui réponde à la page que j'ai jamais vue !!


0 commentaires

6 Réponses :


0
votes

ex. Si vous avez un fichier appelé mypicture.gif sur serveur A et souhaitez l'envoyer au serveur B, vous pouvez utiliser CURL.

  1. serveur A lit le contenu en tant que chaîne. LI>
  2. Postez la chaîne avec CURL au serveur B LI>
  3. Server B récupère la chaîne et le stocke en tant que fichier appelé myPictyre-copy copy.gif li> ol>

    voir http://php.net/manual/fr/book.curl.php code> p>

    Quelques échantillons de code PHP: P>

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


0 commentaires

12
votes

Lorsque le navigateur est un ajout fichier sur le serveur, il envoie une requête HTTP POST, qui contient le contenu du fichier.

Vous devrez reproduire cela. P>


Avec PHP, le plus simple (ou, au moins, plus utilisé) solution em> est sans doute de travailler avec boucle code> strong> p>

Si vous jetez un oeil à la liste des options que vous pouvez définir avec curl_setopt code> strong> , vous verrez celui-ci: CURLOPT_POSTFIELDS code> strong> (citant) em>: p>

Les données complètes à afficher dans un HTTP « POST » opération.
Pour envoyer un fichier , préfixer un nom de fichier avec @ et utiliser le chemin complet strong>.
Cela peut être passé comme une chaîne urlencoded comme 'Para1 = val1 & para2 = val2 & ... ou comme tableau avec le nom du champ comme clé et les données de terrain comme valeur.
Si la valeur est un tableau, l'en-tête Content-Type sera être réglé sur multipart / form-data. p> Blockquote>


Non testé, mais je suppose que quelque chose comme ça devrait faire l'affaire - ou au moins
vous aider à commencer: p>

$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);
  • utilisent boucle li>
  • doivent définir l'URL de destination li>
  • indiquer que vous voulez curl_exec code> pour retourner le résultat, et non la sortie il li>
  • utilisent POST code>, et non GET code> li>
  • envoyez des messages des données, y compris un fichier -. Noter le avant le chemin du fichier @ code> li> Ul> p>


3 commentaires

+1, je n'ai pas réalisé qu'il était aussi simple que d'utiliser le symbole @ avec php :-)


La dernière option définie devrait être "curl_setopt"


Salut @pascal martin J'utilise le même appel de courbure, mais dans le script de destination, je reçois des données dans $ _ POST pas dans $ _ fichiers . Pouvez-vous s'il vous plaît aider pourquoi?



3
votes

Vous pouvez le faire de la même manière. Juste cette fois, votre serveur qui a reçu le fichier d'abord est le client et le second serveur est votre serveur. Essayez d'utiliser ceci:

pour la page Web sur le second serveur: p> xxx pré>

et en tant que script pour envoyer le fichier sur le premier serveur: P>

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


1 commentaires

Utilisation de PHP 7.1, je reçois une erreur 400: mauvaise demande



3
votes

Il s'agit d'un script PHP simple, j'utilise fréquemment pour le déplacement de gros fichiers du serveur vers des serveurs.

set_time_limit(0); //Unlimited max execution time

$path = 'newfile.zip';
$url = 'http://example.com/oldfile.zip';
$newfname = $path;
echo 'Starting Download!<br>';
$file = fopen ($url, "rb");
if($file) {
    $newf = fopen ($newfname, "wb");
    if($newf)
        while(!feof($file)) {
            fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );
            echo '1 MB File Chunk Written!<br>';
        }
}
if($file) {
    fclose($file);
}
if($newf) {
    fclose($newf);
}
echo 'Finished!';


0 commentaires

0
votes

le moyen le plus simple de transférer le fichier un serveur en un autre serveur.

Tout d'abord, besoin d'activer EXTENSION PHP SSH2 SSH2 et utilisez le code suivant < Pré> xxx


0 commentaires

0
votes

C'est très facile.Ce est très facile et code simple xxx


Tapez votre URL dans cette variable - dollar = "http: // fichier-url"

Tapez votre fichier Enregistrer comme dans l'hébergement Sever- $ dest = 'fichiers.jpg';


0 commentaires