Lire uniquement la fin d'un gros fichier distant...

Signaler
Messages postés
95
Date d'inscription
mercredi 6 juillet 2005
Statut
Membre
Dernière intervention
23 août 2010
-
Messages postés
95
Date d'inscription
mercredi 6 juillet 2005
Statut
Membre
Dernière intervention
23 août 2010
-
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="ProgId" content="Word.Document" />
<meta name="Generator" content="Microsoft Word 9" />
<meta name="Originator" content="Microsoft Word 9" />
<link rel="File-List" href="file:///D:/DOCUME%7E1/ADMINI%7E1/LOCALS%7E1/Temp/msoclip1/01/clip_filelist.xml" />
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:HyphenationZone>21</w:HyphenationZone>
<w:DoNotOptimizeForBrowser/>
</w:WordDocument>
</xml><![endif]-->
<style>
<!--
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";}
@page Section1
{size:612.0pt 792.0pt;
margin:70.85pt 70.85pt 70.85pt 70.85pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
-->
</style>
Bonjour tout le monde, j'espère que j'aurai poster au bon endroit
^^°



<!--[if !supportEmptyParas]--> <!--[endif]-->


Voilà, je suis confronté à un problème de taille, j'ai fait
pas mal de test avec des fopen/fseek/fread, et je n'arrive toujours pas à faire
une fonction qui me retourne la fin d'un fichier distant. En détail sa donne :



<!--[if !supportEmptyParas]--> <!--[endif]-->


Un gros fichier distant (~500Mo de txt), seul les 2000
derniers octets m'intéresse (soit une petite douzaine de lignes).



<!--[if !supportEmptyParas]--> <!--[endif]-->


Comment faire avec PHP (sans télécharger ou lire
l'intégralité du fichier bien sur..) ??



<!--[if !supportEmptyParas]--> <!--[endif]-->


Je pense en ce moment a l’utilisation des socket, mais vu
que je connais pas bien ces outil, je préfère poster ici au cas où j’y
arriverai pas.



<!--[if !supportEmptyParas]--> <!--[endif]-->


Merci et Bonne soirée

Ps : résultat des test avec l'utilisation de fseek :
stream does not support seeking

9 réponses

Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Salut,

Sans y réfléchir trop je ne pense pas que ça soit possible.

(chouette, ma plus longue réponse depuis longtemps !! )

Cordialement,

Kohntark -
Messages postés
95
Date d'inscription
mercredi 6 juillet 2005
Statut
Membre
Dernière intervention
23 août 2010

salut et merci, j'en arriverai presque a la même conclusion

je vais voir du coté des commandes unix on sais jamais...

Mais sinon, sa me turlupine toujours ! je pense en ce moment au gestionnaires de téléchargement, pour reprendre un téléchargement, comment ils font si on peux pas "naviguer" dans un fichier ??

on doit bien pouvoir sélectionner en quelque sorte quel bous du fichier on veux télécharger, je pense que la réponse se trouve dans les socket, la manipulation des header, ou que sais-je encore... La nuit sera longue
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Si tu trouves quelque chose ça m'intéresse.
Comme je le disais je n'y ai pas réfléchi plus que ça, mais, pour un fichier texte, le flux de données va commencer du début, pour s'achever ... par la fin. Etant donné que c'est par là que tu souhaites commencer, même avec les sockets c'est mort. L'inverse aurait été simple à réaliser.
Je doute fort qu'il y ait moyen de passer une commande qui commence par la fin.

Suivant l'utilisation que tu veux il est peut être possible de limiter le nombre de téléchargement de ce fichier, voir faire cela en "temps maqué"

Tiens nous au courant,

Kohntark -
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
"temps masqué" bien sur, pas de prostitution ici !!

Kohntark -
Messages postés
95
Date d'inscription
mercredi 6 juillet 2005
Statut
Membre
Dernière intervention
23 août 2010

lol

j'avance un peux, mais en fait, je cherche pas forcement a lire le fichier en commançant par la fin, mais plutôt lire les x derniers octet, c'est pas pareil... donc au début, je commence par récupérer la taille du fichier en question, j'ouvre un (ou une ?)  socket, j'envoi plusieurs header, et je cherche Content-Length, je récup la taille en Bytes, puis je voulais faire un fopen suivit de fseek($h, $taille-$nb_octect_que_je_ve_lire); et c'est là que sa veu pas :'(

Je creuse donc du coté des headers, je vien de trouve ceci : Byte Ranges là http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html, je croi que je touche au but, je vai voir ce que sa donne :p
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
A mon humble petit avis fseek nécessite d'avoir le fichier entier (donc fopen), ce qui ne résous pas le pb.
J'ai un vague souvenir (lointain) où nous avions parlé sur ce forum de ce sujet. Plusieurs tests avaient été fait ... sans résultat.
J'ai parcouru en diagonale le Byte Ranges de ton lien, c'est peut être une piste.
Tiens moi au courant de tes avancées, ça m'intéresse vraiment, ça me permettrai notamment d'accélérer certains crawler/bots.
Suivant mes dispos je ferai quelques tests.

Bon courage,

Kohntark -
Messages postés
95
Date d'inscription
mercredi 6 juillet 2005
Statut
Membre
Dernière intervention
23 août 2010

J'ai trouvé !!

en fait c'est pas super compliqué...

dans le second header envoyé, suffit de rajouter ceci :

fputs($fp, "Range: bytes= 504085000 - 504085300 \r\n");

504085300 est la taille du fichier, et 504085000 = le nombre d'octet qu'on veut lire moins la taille du fichier (soit 300 octets lu ici).

le serveur renverra donc QUE les 300 octets qu'on demande

(testé uniquement sous Apache2 / debian 5)
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Chapeau bas Equilibrius

Ca fait du bien d'avoir tort.
J'avais cherché il y a quelque temps, sans résultat.
Je testerai ça dès demain si je peux.

Félicitations en tout cas !!!

Bonne nuit (pas si longue que ça au final ) à toi,

Kohntark -
Messages postés
95
Date d'inscription
mercredi 6 juillet 2005
Statut
Membre
Dernière intervention
23 août 2010