Boo2M0rs0
dimanche 16 avril 2006 à 20:59
CITATION(rportal @ dimanche 16 avril 2006, 17h27)
Tu parles de fichiers distants? tu utilises http je presume? Il ne me semble pas que http te permette de spécifier la taille de la réponse, ni si tu veux une partie de fichier. ce n'est pas un protocole pour gérer les échanges de fichiers.Si tu eux pouvoir télécharger juste une partie de fichier, il faut utiliser des protocoles adaptés comme le ftp.
Normalement pour les fichiers locaux, le fichier est parcouru au fur et à mesure et non pas lu en entier. (flux en local).
C'est justement là ou je voulais en venir

lors de l'appel à fopen(), php est obligé de demander le fichiers au serveur, or il ne sait pas encore quelle partie du fichier va lui être utile et le protocole http l'oblige quand même à définir quelle partie du fichier récupérer, donc tant qu'à faire, il n'indique rien et le serveur lui envoie
tout le fichier.
Pourtant, il y a un truc, sinon comment feraient les optimisateurs de téléchargement qui peuvent reprendre un téléchargement à partir d'un serveur http, lancer plusieurs connexions simultanées etc.
D'après la description du rfc concernant Chunked, je crois que c'est pas vraiment cette option, elle a l'air de se contenter d'envoyer le fichier en plusieurs morceaux coupées, mais ces morceaux sont encore une fois tous envoyés en même temps. Je crois que ça sert uniquement pour permettre aux navigateurs d'afficher progressivement les pages web qu'ils recoivent sans avoir à attendre la fin du transfert.
Par contre sur le site qu'à donner TheRec j'ai retrouvé l'histoire des "range":
http://www.w3.org/Protocols/rfc2616/rfc261...4.html#sec14.35En clair, comme cette option est spécifiée avant l'envoi du fichier, le serveur sait quelle partie du fichier il faut qu'il envoie, et seule cette partie de fichier transite sur le net.
Il n'y a plus qu'à spécifier le header en question avec stream_context_create() ou alors utiliser la fonction de curl.