2010-10-13 12 views
2

Je veux copier un fichier en utilisant PHP sur http à partir d'un lien dans ce formatCopiez le fichier depuis un serveur distant en utilisant PHP via HTTP

http://myserver.com/?id=1234

si j'ouvre le lien, le téléchargement du fichier commence. Donc je suppose que le serveur redirige vers un fichier .mp3 pour commencer le téléchargement.

Alors comment copier/télécharger le fichier depuis le serveur distant vers mon serveur (localhost)?

+0

Pourriez-vous nous montrer comment vous avez essayé d'accomplir cela? (code) – Claudiu

Répondre

2

Je suppose ici que le serveur distant envoie le fichier complet via HTTP. Vous pouvez utiliser une bibliothèque telle que curl pour envoyer une requête HTTP et stocker les données reçues sous forme de fichier (en utilisant CURLOPT_FILE).

Si votre serveur PHP local est correctement configuré, vous pouvez également utiliser copy pour copier d'une URL distante vers un chemin local.

+0

Pouvez-vous me fournir des exemples en utilisant les deux méthodes? – sikas

+1

Pour la deuxième méthode, il y a un exemple sur la page à laquelle je suis lié. Je suis de bonne humeur, je vais donc fournir un lien direct (http://fr.php.net/manual/fr/function.copy.php#83955) mais vous voudrez peut-être travailler sur vos compétences en documentation. –

6

Juste pour Gove un exemple de ce que Victor est tlking au sujet BOUCLÉ:

$options = array(
    CURLOPT_FILE => '/local/path/for/file.mp3', 
    CURLOPT_FOLLOWLOCATION => true, 
    CURLOPT_URL => 'http://myserver.com/?id=1234', 

); 

$ch = curl_init(); 
curl_setopt_array($ch, $options); 
curl_exec($ch); 
+0

Comme je peux le voir dans votre exemple, le chemin vers le fichier .mp3 est défini, mais je ne connais pas l'URL du fichier .mp3! – sikas

+0

thats le chemin que vous voulez télécharger aussi ... vous n'avez pas besoin de connaître le chemin d'accès au fichier sur le serveur distant, tant que l'URL retourne le fichier. – prodigitalson

+0

+1 pour m'avoir appris 'curl_setopt_array()'! Je n'avais jamais entendu parler de ça avant maintenant. – chigley

0

Essayez d'utiliser un rappel de notification (lire ici pour mor informations http://www.php.net/manual/function.stream-notification-callback.php)

par exemple vous pouvez à cela si vous voulez copier:

function stream_notification_callback($notification_code, $severity, $message, $message_code, $bytes_transferred, $bytes_max) 
{ 
    if($notification_code == STREAM_NOTIFY_PROGRESS) 
    { 
    // save $bytes_transferred and $bytes_max to file or database 
    } 
} 


$ctx = stream_context_create(); 
stream_context_set_params($ctx, array("notification" => "stream_notification_callback")); 
copy($remote_url,$Local_target,$ctx); 

Un autre fichier PHP pouvait lire le bytes_transferred sauvé $ et bytes_max $ et afficher une barre de progression agréable.

Questions connexes