Fsockopen et boucle [Résolu]

NewSky 86 Messages postés dimanche 27 janvier 2002Date d'inscription 20 février 2009 Dernière intervention - 2 avril 2008 à 14:44 - Dernière réponse : malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention
- 2 avril 2008 à 20:08
Bonjour,
Le problème que j'ai est peut être du à une mauvaise utilisation de fsockopen().
En fait, dans le but de créer un simple crawler web, j'utilise fsockopen pour me connecter à un site et ainsi récupérer tous les liens internes en récupérant les pages une par une.
J'ai une méthode qui fonctionne :
j'ouvre une connexion avec fsockopen pour chaque page (envoie des en-têtes, récupération des données, traitement, ...)

Je me disais qu'il était possible d'augmenter la rapidité du crawl en n'ouvrant qu'une seule connexion et de gérer l'appelle des page ensuite avec les en-têtes. Mais là, problème :
En effet, la récupération des données ne fonctionne que pour la première page. Mon crawl continue sur les liens récupérés sur cette 1ère page, mais aucune données n'est récupérées. J'ai donc vérifier ( avec stream_get_meta_data() ), et effectivement, lors du 1er passage, <tt class="parameter">eof</tt> passe à TRUE (logique me direz-vous). Du coup, lorsque je veux récupérer les autres données, c'est impossible!
Le fait de renvoyer de nouvelles en-têtes ne ré-initialise pas l'état de la ressource. Il est aussi impossible d'utiliser rewind() ou autre fseek() avec fsockopen.
Existe-t-il une autre façon de procéder d'après vous, ou seule ma 1ère utilisation est la bonne?
Merci d'avance

 
Afficher la suite 

Votre réponse

7 réponses

neigedhiver 2492 Messages postés jeudi 30 novembre 2006Date d'inscription 14 janvier 2011 Dernière intervention - 2 avril 2008 à 15:00
+3
Utile
Salut,

Je pense que c'est la meilleure façon de faire... Je ferais pas mieux, quoi.

<hr size="2" width="100%" />Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de neigedhiver
yoman64 962 Messages postés samedi 19 janvier 2002Date d'inscription 2 août 2010 Dernière intervention - 2 avril 2008 à 15:56
0
Utile
Salut,

(Ce message ne t'apportas rien à ton problème puisque je sais que si neigedhiver dit que c'est bien, alors c'est forcément vrai :P)

Donc je voulais savoir, par simple curiosité, à quoi ton crawler sert-il ? J'essais d'imaginer l'application d'un tel script mais je ne trouve rien de concret, si ce n'est que pour apprendre ?

-------------------
Vous cherchez un hebergement Php/MySQL Gratuit et sans publicités ??
Et bien c'est la : www.e3b.org  
Commenter la réponse de yoman64
NewSky 86 Messages postés dimanche 27 janvier 2002Date d'inscription 20 février 2009 Dernière intervention - 2 avril 2008 à 16:29
0
Utile
Multiples utilisations :
<li>Génération de plan sitemap</li><li>Etudes des pages pour un référencement</li><li>tout ce à quoi peut servir un crawler... </li>Ça ne te semble pas pertinent?

 
Commenter la réponse de NewSky
neigedhiver 2492 Messages postés jeudi 30 novembre 2006Date d'inscription 14 janvier 2011 Dernière intervention - 2 avril 2008 à 16:44
0
Utile
@Yoman64

"Ce message ne t'apportas rien à ton problème puisque je sais que si
neigedhiver dit que c'est bien, alors c'est forcément vrai :P"

C'est gentil, mais c'est n'importe quoi lol

<hr size="2" width="100%" />Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
Commenter la réponse de neigedhiver
yoman64 962 Messages postés samedi 19 janvier 2002Date d'inscription 2 août 2010 Dernière intervention - 2 avril 2008 à 17:04
0
Utile
@NewSky: Biensur c'est tout à fait pertinent.Comme j'ai dis c'était par curiosité, je n'ai jamais mis en doute la pertinence de ton projet.

@neigedhiver: Tu as sans doute raison Mais il n'en reste pas moin que tu es un des "experts" de ce site, alors il est rare (enfin...) de devoir te contredire.

-------------------
Vous cherchez un hebergement Php/MySQL Gratuit et sans publicités ??
Et bien c'est la : www.e3b.org  
Commenter la réponse de yoman64
NewSky 86 Messages postés dimanche 27 janvier 2002Date d'inscription 20 février 2009 Dernière intervention - 2 avril 2008 à 19:31
0
Utile
Je vais donc rester sur ma première position
Merci de votre aide
Commenter la réponse de NewSky
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 2 avril 2008 à 20:08
0
Utile
hello,

"Il est aussi impossible d'utiliser rewind() ou autre fseek() avec fsockopen."
Ce n'est pas tout à fait vrai. Je te propose une alternative (désolé si je grille l'avis des autres ;-)) :
http://fr2.php.net/manual/en/function.stream-wrapper-register.php
Je te laisse fouiller et tâcher de comprendre.
Commenter la réponse de malalam

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.