IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

file_get_contents() qui déconne une fois sur 3


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 16
    Points : 8
    Points
    8
    Par défaut file_get_contents() qui déconne une fois sur 3
    Salut à tous !

    Je développe une application en PHP/MySQL qui parse les moteurs de recherche Google, Yahoo et Bing afin de récupérer le positionnement des sites.

    Pour celà je récupère le contenu de leur code source avec la fonction file_get_contents()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    //Définition du moteur de recherche
    if ($moteur == "Google")
    {
    	$url_moteur = 'http://www.google.fr/search?hl=fr&client=firefox-a&rls=org.mozilla:fr:official&q='.$mot.'&start='.$nb.'&sa=N';
    }
    else if ($moteur == "Yahoo")
    {
    	$url_moteur = 'http://fr.search.yahoo.com/search?p='.$mot.'&ei=UTF-8&rd=r1&fr=sfp&xargs=0&pstart=1&b='.$nb.'';
    }
    else if ($moteur == "Bing")
    {
    	$url_moteur = 'http://www.bing.com/search?q='.$mot.'&filt=all&first='.$nb.'';
    }
     
    // Récupération du code source du moteur de recherche
    if ($source = @file_get_contents($url_moteur))
    {
    }
    else
    {
    	echo 'Erreur'.$url_moteur;
    	return false;
    }

    Ce code est contenu dans une boucle pour effectuer le travail sur les 3 moteurs de recherche.

    Le problème est que des fois, le code s'effectue parfaitement jusqu'au bout, d'autres fois, j'obtiens une erreur et ca s'arrête prématurément avec le message d'erreur que j'ai bien précisé dans le 'else', comme si file_get_contents() n'arrivait pas à lire la page web entré en paramètre.

    Connaitriez-vous la cause de ceci ?

    Merci.

  2. #2
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Je pense que c'est le fait que si cela concerne aucun des moteurs, la fonction est quand même exécutée.

    La initialisée + une petite vérif sur $url_moteur devrait suffire.

    Comme ceci peut être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    //Définition du moteur de recherche
    $url_moteur = null;
    if ($moteur == "Google") {
    	$url_moteur = '... blablabla ...';
    }
    else if ($moteur == "Yahoo") {
    	$url_moteur = '... blablabla ...';
    }
    else if ($moteur == "Bing") {
    	$url_moteur = '... blablabla ...';
    }
     
    // Récupération du code source du moteur de recherche
    if (!empty($url_moteur) && ($source = @file_get_contents($url_moteur))) {
    }
    else {
    	echo 'Erreur'.$url_moteur;
    	return false;
    }
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Elle concerne bien l'un des moteurs(et d'ailleurs je viens de remarquer que Yahoo), puisqu'il m'affiche le message d'erreur présent dans le 'else'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo 'Erreur '.$url_moteur
    $url_moteur correspond bien à la valeur qui lui est attribuée plus haut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    else if ($moteur == "Yahoo")
    {
            $url_moteur = 'http://fr.search.yahoo.com/search?p='.$mot.'&ei=UTF-8&rd=r1&fr=sfp&xargs=0&pstart=1&b='.$nb.'';
    }
    C'est donc qu'il répond bien à la condition $moteur == "Yahoo".

    Pourquoi ça ne concerne que Yahoo ? La je pioche...

  4. #4
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Ben là ça veut dire que la fonction file_get_contents() retourne rien.
    Tu devrais pouvoir le vérifier en faisant un echo sur $source.

    Enlève le @ devant, un bon message d'erreur ça aide aussi à comprendre

    C'est peut être l'url qui n'est pas bonne, elle pointe peut être nulle part.
    Tu devrais aussi vérifier se que contient $mot et $nb.
    fait un echo de $url_moteur directement à la fin par exemple.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    $mot et $nb sont correctement initialisés.

    Là par exemple, je viens de refaire un test, toujours un soucis

    "Erreur http://fr.search.yahoo.com/search?p=briant&ei=UTF-8&rd=r1&fr=sfp&xargs=0&pstart=1&b=1"

    Si je copie l'url dans le navigateur, tout semble correct, la page fonctionne . Alors pourquoi $source ne récupère pas le contenu de la page, je bloque...

    Je me demande si il n'y a pas un soucis de limitations de requêtes chez Yahoo et qui m'empêche de récupérer le contenu.

  6. #6
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Une limitation sur Yahoo ?
    Comme ça, je dirais que non, qu'il n'y a pas de raison.
    Enfin, à moins que ton code est dans une boucle ...

    En faisant un echo de $source et en enlevant le @, qu'est ce que tu obtiens ?
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  7. #7
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Oui dans une boucle, voir même 2.

    Une qui change le mot ($mot) dans l'url, 20 fois. L'autre qui change la page de Yahoo analysé($nb), 20 fois également. Ce qui au total nous fait 400 requêtes à la suite.

    Excessif ?

    Je vais essayer d'enlever le @, pour l'echo de $source par contre je vais éviter vu qu'il devra m'afficher 400 pages

  8. #8
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Oups, ben je peux plus tester sans le @, Yahoo a banni temporairement mon IP pour sur-interrogation de leurs serveurs

Discussions similaires

  1. Pb de requête qui marche une fois sur deux
    Par emulamateur dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 26/04/2011, 16h45
  2. NamedQuery qui marche une fois sur deux
    Par Damascus06 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 06/12/2010, 15h41
  3. getElementById qui retourne "" une fois sur deux
    Par Cronycs dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/05/2007, 17h33
  4. Erreur ASP : le test qui marche une fois sur 2 !
    Par Ryo_san dans le forum ASP
    Réponses: 2
    Dernier message: 04/07/2006, 09h47
  5. Pb : malloc qui marche une fois sur deux .... ?
    Par guillaume_pfr dans le forum C
    Réponses: 14
    Dernier message: 21/07/2003, 09h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo