2012-08-31 6 views
1

Je dois fournir un téléchargement à partir d'une URL distante où je ne connais pas la taille du fichier.Comment php permet le téléchargement depuis une URL distante (streaming)?

Les problèmes que j'avais jusqu'à présent

  • Je ne sais pas la taille du fichier

  • fichier Grand environ 100 mb

  • Lorsque je fournis téléchargement utilisateur/CURL/readfile. .. alors PHP attend aussi longtemps que le fichier ful, puis affiche la fenêtre de téléchargement.

Comment puis-je fournir une partie, un flux, un téléchargeur volumineux?

Je veux faire quelque chose comme sur phpmyadmin - si vous téléchargez une exportation sql - alors il flux également.

Merci d'avance.

Répondre

2

Le streaming est normalement effectué en utilisant un petit tampon. Disons que vous aviez allow_url_fopen réglé sur vrai:

$file = fopen('http://example.com/large-file.bin', 'rb'); 
while (($content = fread($file, 2048)) !== false) { // Read in 2048-byte chunks 
    echo $content; // or output it somehow else. 
    flush(); // force output so far 
} 
fclose($file); 
+0

Bonjour arxanas Merci pour votre idée. Cela semble bien, mais si appeler le script alors en charge tant que le fichier a chargé la taille entière. Ce n'est pas ce que je veux, il doit commencer après quelques secondes et ensuite télécharger à l'utilisateur et en streaming. – user1509034

+0

@ user1509034 D'après ce que j'ai compris, c'est ce que fait ce script. Cependant, on peut vouloir manuellement 'flush()' après chaque 'echo', donc j'ai ajouté ça. –

+0

ok j'ai ajouté aussi la méthode flush. Mais c'est étrange - j'ai recommencé le script et son chargement pendant plus de deux minutes et rien ne sort et aucune fenêtre de téléchargement ne commence à télécharger. Ai-je oublié quelque chose? – user1509034

Questions connexes