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 :

Chercher une chaîne de caractères dans une page en réseau local


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 29
    Points : 15
    Points
    15
    Par défaut Chercher une chaîne de caractères dans une page en réseau local
    Bonjour à tous !

    Voilà mon problème : je dois pouvoir chercher une chaîne de caractères dans une page.

    J'ai donc testé ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $contenu_page = file_get_contents('http://www.google.fr');
    if(preg_match("/google/i", $contenu_page))
    	echo "Chaîne trouvée !";
    else
    	echo "Chaîne absente !";
    Il marche très bien, pour un site externe. Seulement, j'aimerais chercher la chaîne de caractère "Toner restant" sur une page du réseau de l'établissement. (En fait c'est l'adresse IP d'une imprimante...)

    Mais lorsque je mets l'adresse locale dans mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $contenu_page = file_get_contents('http://172.16.**.**/Istatus.htm');
    if(preg_match("/Toner restant/i", $contenu_page))
    	echo "Chaîne trouvée !";
    else
    	echo "Chaîne absente !";
    Ca m'affiche (sous Chrome) :

    Aucune donnée reçue.
    Impossible d'afficher la page Web, car le serveur n'a envoyé aucune donnée.
    Voici quelques suggestions :
    Actualisez cette page Web ultérieurement.
    Erreur 324 (net::ERR_EMPTY_RESPONSE) : Le serveur a mis fin à la connexion sans envoyer de données.
    Alors que je suis bien connectée au réseau puisqu'en tapant l'adresse "http://172.16.**.**/Istatus.htm", je tombe sur la page voulue.

    J'ai testé également avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $fichier = fopen('http://172.16.**.**/Istatus.htm', "r");
    $contenu_page = '';
    while (!feof($fichier))
    	$contenu_page .= fread($fichier, filesize($contenu_page));
    fclose($fichier);
    if(preg_match("/Toner restant/i", $contenu_page))
    	echo "Chaîne trouvée !";
    else
    	echo "Chaîne absente !";

    Et ça me donne exactement le même résultat.

    Alors j'aimerais bien comprendre pourquoi ce code fonctionne très bien avec une page externe au réseau de l'établissement, mais pas avec une page interne de ce réseau...

    Merci d'avance de vos réponses !

    Voyel.

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Pour parser un flux HTML c'est avec DOMDocument.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 29
    Points : 15
    Points
    15
    Par défaut
    Merci de ta réponse.
    Cependant, je ne suis pas très calée en Php, et franchement DOMDocument, ça ne me dit absolument rien... Je cliqué sur le lien, j'ai essayé de comprendre mais je n'ai pas réussi :/
    J'ai chercher un peu sur le net, j'ai testé ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $contenu_page = new DOMDocument();
    $contenu_page->load('http://172.16.**.**/Istatus.htm');
    if(preg_match("/Toner restant/i", $contenu_page))
    	echo "Chaîne trouvée !";
    else
    	echo "Chaîne absente !";
    Mais ça ne marche pas... Pourrais-tu m'éclairer ? :/

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Je vais être plus explicite: de la même façon qu'on ne démonte pas un pneu avec une cuillère on ne fait pas de recherches par regexp dans des flux XML, y'a des structures faites pour ça.

    Il faut utiliser des XPath pour faire des recherches dans des flux XML / XHTML.

    Ou bien tu peux traverser le DOM à la main avec les méthodes de DOMDocument et de DOMElement.

    Si tu ne connais vraiment rien à la gestion de XML en PHP, je te suggère ces cours: http://eusebius.developpez.com/php5dom/

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 29
    Points : 15
    Points
    15
    Par défaut
    Merci, je vais lire tout ça, en essayant de comprendre un minimum...

    Mais sinon, pourquoi ce que j'avais fait à la base marche avec des sites externes mais pas avec les interfaces des imprimantes en réseau local ?

  6. #6
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Je ne crois pas que PHP soit équipé de wrappers pour interroger des imprimantes réseau. Cela étant tu peux créer tes propres contextes de flux (on appelle ça des stream wrappers en anglais).

  7. #7
    Membre éprouvé Avatar de Marc3001
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2008
    Messages
    829
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2008
    Messages : 829
    Points : 1 275
    Points
    1 275
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Je ne crois pas que PHP soit équipé de wrappers pour interroger des imprimantes réseau. Cela étant tu peux créer tes propres contextes de flux (on appelle ça des stream wrappers en anglais).
    Benjamin sur ce coup là j'ai l'impression que tu as été un peu vite.

    Il semble que l'imprimante réponde en HTTP sur l'IP testée sur le port 80. L'erreur que tu rencontres c'est que à priori l'IP répond bien mais la réponse est vide....

    Tu dis que sous Chrome ça déconne.... Après tu dis que tu arrives quand même à afficher ta page... Là je ne comprends pas.
    Tu la vois ta page ou non?
    Le logiciel, c'est comme le sexe, c'est meilleur quand c'est libre.

    Linus Torvalds

  8. #8
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Ok, si c'est une interface HTTP, tu dois avoir moyen d'y accéder (si ton routeur le permet bien sûr )

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 29
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Marc3001 Voir le message
    Benjamin sur ce coup là j'ai l'impression que tu as été un peu vite.

    Il semble que l'imprimante réponde en HTTP sur l'IP testée sur le port 80. L'erreur que tu rencontres c'est que à priori l'IP répond bien mais la réponse est vide....

    Tu dis que sous Chrome ça déconne.... Après tu dis que tu arrives quand même à afficher ta page... Là je ne comprends pas.
    Tu la vois ta page ou non?
    Je vais tenter de mieux m'exprimer :p
    En fait, quand je veux afficher l'interface de l'imprimante (donc avec son adresse IP), ça marche, ce qui signifie que je suis bien sur le réseau, MAIS quand je souhaite faire un file_get_contents sur cette page, ça me met
    Aucune donnée reçue.
    Impossible d'afficher la page Web, car le serveur n'a envoyé aucune donnée.
    Voici quelques suggestions :
    Actualisez cette page Web ultérieurement.
    Erreur 324 (net::ERR_EMPTY_RESPONSE) : Le serveur a mis fin à la connexion sans envoyer de données.
    EDIT :

    Je viens de tester ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $fichier = 'Toner.html';
    $url = 'http://172.16.**.**/Istatus.htm/';
    $dom = new DOMDocument();
    $dom->loadHTMLFile($url);
    $dom->saveHTMLFile($fichier);
    $contenu = file_get_contents($fichier);
     
    if(preg_match("/Toner restant/i", $contenu))
    	echo "Chaîne trouvée !";
    else
    	echo "Chaîne absente !";
    Mais cela ne fonctionne pas... J'ai testé avec un site externe (google, par exemple), et ça fonctionne... Je sais pas quoi faire Help !!! ^^

  10. #10
    Membre éprouvé Avatar de Marc3001
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2008
    Messages
    829
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2008
    Messages : 829
    Points : 1 275
    Points
    1 275
    Par défaut
    Aucune donnée reçue.
    Impossible d'afficher la page Web, car le serveur n'a envoyé aucune donnée.
    Voici quelques suggestions :
    Actualisez cette page Web ultérieurement.
    Erreur 324 (net::ERR_EMPTY_RESPONSE) : Le serveur a mis fin à la connexion sans envoyer de données.
    C'est un message d'erreur du navigateur chrome pas de file_get_contents.....
    Comment obtiens-tu ce message??
    Le logiciel, c'est comme le sexe, c'est meilleur quand c'est libre.

    Linus Torvalds

Discussions similaires

  1. Réponses: 7
    Dernier message: 23/12/2013, 18h19
  2. [MySQL] Remplacer une chaîne de caractères dans une base de données
    Par Furius dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 27/11/2013, 21h06
  3. Chercher une chaîne de caractères dans une liste
    Par baedal dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 28/05/2007, 23h42
  4. Remplacer une chaîne de caractères dans une base
    Par Furius dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/10/2005, 23h03
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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