2011-10-24 6 views
2

J'ai une situation où j'ai besoin de déplacer des fichiers d'un endroit à un autre. En utilisant cURL, il est facile de télécharger les fichiers, puis de les télécharger en utilisant le symbole "sweet", par exemple "file_box" => "@/path/to/myfile.jpg" Ce que je cherche à faire maintenant, c'est contourner au milieu et juste "flux" le fichier de l'un à l'autre. Est-ce possible?cURL php télécharger et télécharger sans enregistrer au milieu

+1

À quoi chargez-vous? – Brad

+0

Vous ne pouvez pas utiliser curl pour qu'un serveur distant communique avec un autre, à moins que l'un de ces serveurs distants n'expose une fonctionnalité pour le faire. –

+0

@MarcB Pourquoi cela ne fonctionnerait-il pas s'il utilisait l'emplacement temporaire du fichier téléchargé comme chemin d'accès au script cURL? –

Répondre

1

Bien sûr, vous pouvez le faire. Je ne suis pas sûr que vous pouvez utiliser cURL pour le POST cependant. Vous devriez regarder dans ses méthodes pour voir si elle vous permettra de rappeler pour la prochaine partie de données.

http://curl.haxx.se/libcurl/php/examples/callbacks.html

$ch = curl_init(); 
curl_set_opt($ch, CURLOPT_HEADERFUNCTION, 'read_header'); 
curl_set_opt($ch, CURLOPT_WRITEFUNCTION, 'read_body'); 

function read_header($ch, $data) { 
    // Ok, so the header is going to come in here. 
    // I assume you will need data, such as MIME type and what not. 
    print_r($data); 
    return strlen($data); //This means that we handled it, so cURL will keep processing 
} 

function read_body($ch, $data) { 
    // This is where the body of the content will be, in chunks. 
    // This function will be called multiple times. 
    print_r($data); 
    return strlen($data); //Again, if we don't do this, cURL will cancel. 
} 

Maintenant, pour la partie envoi, il semble que vous devrez implémenter vous avec HTTP fsockopen. Voir ici pour plus d'informations: PHP How To Send Raw HTTP Packet

0

Je travaille actuellement avec un problème similaire maintenant. et dans la mesure où mon expérience, vous devrez ouvrir un handle de fichier, et enregistrer les données en local avant de pouvoir le télécharger sur un autre serveur.

Je sais ce que vous entendez par streaming, car vous voulez streamer/canaliser le fichier que vous téléchargez vers PUT ou POST vers un autre serveur.

Je ne pense pas que le streaming est possible avec Php curl. Vous devez enregistrer le fichier localement. puis ouvrez-le et téléchargez-le.

J'ai fait un travail similaire avec Java, avec que vous utilisez réellement des flux, donc cela pourrait fonctionner mais je n'ai pas essayé.

Questions connexes