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 :

PHP Simple HTML DOM Parser


Sujet :

Langage PHP

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 388
    Points : 209
    Points
    209
    Par défaut PHP Simple HTML DOM Parser
    Bonjour,

    J'utilise la classe "PHP Simple HTML DOM Parser" pour récupérer les informations d'un site distant (après avoir tapé un n° ISBN dans un formulaire) :
    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
     
    <?php
     
    if(!empty($_POST) && !empty($_POST['isbn_search']))
     
    {
     
    $isbn_search = mysql_real_escape_string($_POST['isbn_search']);
     
    require_once 'scripts/simplehtmldom_1_5/simple_html_dom.php';
     
    $html = new simple_html_dom();
     
    $html->load_file('http://www.site.com/livres/'.$isbn_search.'.html');
     
    $titre= $html->find('h1',0)->plaintext;
     
    echo'<input type="text" value="'.$titre.'"size="100"/>';
     
    ?>
    Ce code fonctionne dès lors que la page chargée du site distant existe. Mais si la page n'existe pas (en l'occurrence si le site ne référence pas le livre recherché), j'ai les erreurs suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Warning: file_get_contents(http://www.site.com/livres/97822620.html) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in C:\wamp\www\scripts\simplehtmldom_1_5\simple_html_dom.php on line 850
     
    Fatal error: Call to a member function find() on a non-object in C:\wamp\www\scripts\simplehtmldom_1_5\simple_html_dom.php on line 879
    Pour éviter ces erreurs, je souhaiterais ne pas exécuter la récupération de la page (et afficher un message "livre non référencé") si la page appelé ($html->load_file('http://www.site.com/livres/'.$isbn_search.'.html') n'existe pas. Voyez-vous comment procéder ? Merci.

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonsoir,

    Pour faire simple, ce code devrait rouler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
     
    $page = @file_get_contents('http://www.dghfkrti.com/');
    if (false === $page) {
       echo 'Livre non référencé';
    }
    ?>

  3. #3
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 387
    Points
    9 387
    Par défaut
    Utilises plutôt file_exists() pour tester l'existence du fichier.
    Cela ne sert à rien de surcharger la mémoire pour rien.

    Le caractère @ devrait être à bannir de tout code... C'est l'art de jouer à la patate chaude, on se fout des erreurs et donc on peut répercuter une erreur sur tout le reste du script. Mais le plus vicieux c'est que vu qu'on affiche pas l'erreur et bien on ne le sait pas...
    Gérer les erreurs n'est pas si compliqué.

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par transgohan Voir le message
    Le caractère @ devrait être à bannir de tout code... C'est l'art de jouer à la patate chaude, on se fout des erreurs et donc on peut répercuter une erreur sur tout le reste du script. Mais le plus vicieux c'est que vu qu'on affiche pas l'erreur et bien on ne le sait pas...
    Gérer les erreurs n'est pas si compliqué.
    Je suis plutôt du même avis, mais vu que dans son cas il semble utiliser une lib qui ne gère pas les erreurs (en particulier celle en ligne 850), la rustine la plus simple était ce bout de code. Et puis tu ne te refiles pas toujours la patate chaude, si à chaque requête tu obtiens une livre non référencé, tu vas bien finir par te poser des questions, non ? Enfin, j'ai déjà vu le contraire.

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 388
    Points : 209
    Points
    209
    Par défaut
    Merci à tous les deux pour vos réponses. La méthode de rawsrc fonctionne. Je n'ai pas pu encore tester la méthode file_exists(). Mais je croyais que cette fonction ne marchait pas si le fichier testé était un fichier distant... Qu'en pensez-vous ? Merci.

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par almoha Voir le message
    Merci à tous les deux pour vos réponses. La méthode de rawsrc fonctionne. Je n'ai pas pu encore tester la méthode file_exists(). Mais je croyais que cette fonction ne marchait pas si le fichier testé était un fichier distant... Qu'en pensez-vous ? Merci.
    en effet file_exists ne marche pas,
    pour éviter de prendre du temps et de la mémoire, de te soit de faire juste un fopen, soit de faire un get_headers

  7. #7
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 387
    Points
    9 387
    Par défaut
    Au temps pour moi, ce n'est pas ce qu'indiquait la doc.

    Depuis PHP 5.0.0, cette fonction peut aussi être utilisée avec quelques protocoles url. Lisez Liste des protocoles et des gestionnaires supportés pour connaître les protocoles supportant la famille de fonctionnalités de stat().
    http://fr2.php.net/manual/fr/wrappers.php (liste dont il est question et comportant le protocole http)

    La dernière phrase semble indiquer qu'il y a en effet des distinctions, mais rien sur la page est les sous-pages liées n'indique ces familles dont il est question.

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par transgohan Voir le message
    Au temps pour moi, ce n'est pas ce qu'indiquait la doc.


    http://fr2.php.net/manual/fr/wrappers.php (liste dont il est question et comportant le protocole http)

    La dernière phrase semble indiquer qu'il y a en effet des distinctions, mais rien sur la page est les sous-pages liées n'indique ces familles dont il est question.
    la liste des protocole est commune, ils disent juste que ca marche avec les protocoles qui accepte stats, et http ne l'accepte pas

  9. #9
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 387
    Points
    9 387
    Par défaut
    A titre d'information, tu pourrais nous diriger vers la partie de la doc listant cette famille ?
    Car en allant sur la page de la fonction stat on a le même charabia...

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par transgohan Voir le message
    A titre d'information, tu pourrais nous diriger vers la partie de la doc listant cette famille ?
    Car en allant sur la page de la fonction stat on a le même charabia...
    c’était ton lien
    http://fr2.php.net/manual/fr/wrappers.php

    ensuite tu regardes ce que propose http
    http://fr2.php.net/manual/fr/wrappers.http.php

    Support de la fonction stat() Non

  11. #11
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 387
    Points
    9 387
    Par défaut
    Ah oui d'accord ! Et moi qui en voyant le terme "famille" cherchait une liste de fonction...

  12. #12
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 388
    Points : 209
    Points
    209
    Par défaut
    Merci à tous pour ces remarques pertinentes qui m'ont permis de trouver la solution à ma problématique

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [simple html dom] Parser les premiers blocs d'une source html
    Par Marmotton76 dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 21/09/2014, 09h17
  2. simple html dom : récupérer valeur attribut title
    Par totof74 dans le forum Langage
    Réponses: 5
    Dernier message: 20/12/2012, 17h10
  3. Parser une page HTML avec Simple html dom parser
    Par thelover2fr dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 24/05/2012, 13h26
  4. API simple html dom
    Par ryodo dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 26/07/2011, 03h35
  5. [Ajax] [HTML] [DOM] Parser du Html (texte) en Html DOM ou en DOM
    Par thibaut dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/11/2007, 14h44

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