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 :

DOMDocument avec code source navigateur ?


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 117
    Points : 67
    Points
    67
    Par défaut DOMDocument avec code source navigateur ?
    Bonjour,

    Je développe actuellement un petit site perso, et je souhaite mettre en place un fil d'ariane. Je ne veux pas m'embêter à gérer ça via BDD, donc je me fais une petite classe avec une fonction qui me permet à partir de l'emplacement d'une page, de retracer tout le chemin vers elle.

    Sur ce point aucun problème, le chemin est correctement retracé. Ce que je souhaite c'est à chaque bout de chemin, retrouver le titre de la page. Pour cela, j'ai fait quelque recherche sur le net et suis tombé sur DOMDocument. J'ai fait quelque test et cela semble bien fonctionné pour ce qui est la récupération des balises title.

    Mais dans mon cas, mon problème est que quand je lui fournis un lien, DOMDocument fait son boulot et parcourir le fichier appelé par défaut (index.php). Mais moi, je souhaiterai qu'il analyse ce que retourne le navigateur plutôt que le fichier qui se trouve à l'adresse indiqué. Car en effet, le fonctionnement de mes pages se base sur le principe suivant : j'ai une page type dans un dossier include, et la majorité de mes autres pages sont des index.php, qui possède des variables de configuration style $title pour le titre de la page, $page pour la page à inclure, etc... puis qui inclue cette page type. Dans ce cas, DOMDocument ne trouvera jamais de balise title s'il analyse le code car elle n'y sera pas présente.

    Ma question : y-a-t-il un moyen de faire la même chose mais avec le code retourné par le navigateur ? J'ai bien peur que cela passe du serveur au client et qu'au lieu de faire mon fil d'ariane avec php je doivent le faire avec javascript, mais je demande confirmation.

    Merci d'avance pour vos réponse.

  2. #2
    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 386
    Points
    9 386
    Par défaut
    Ce n'est pas le chemin vers ton fichier que tu dois donner à DOMDocument mais son url d'accès normal.

    A savoir si tu as des includes de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // index.php
     
    //... code ....
    include('page.php');
    //... code ...
    Et que tu souhaites cibler page.php il ne faut pas envoyer page.php mais bel et bien index.php (avec à la rigueur les variables GET nécessaires à valider des conditions.

    Ainsi DOMDocument se comportera comme ton navigateur puisqu'il accèdera à la même url.

    Si par contre tu as une modification du code affiché grâce à du javascript c'est en effet impossible de tomber sur le même résultat que le navigateur (car le code JS ne sera pas interprété).

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 117
    Points : 67
    Points
    67
    Par défaut
    C'est bien ce que je fais. Pour info je fais mes test sous IIS et en local.

    Voilà un peu tous mes codes de test histoire de voir où peut-être le problème (pour info il y a plein de donnée test donc il ne fonctionne pas encore comme il devrait fonctionné) :

    Ma classe Navigation
    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
    <?php
    	class Navigation{
    		public static function getTitle($path){
    			//$path = "http://".$_SERVER["HTTP_HOST"].$path;
    			$doc = new DOMDocument();
    			$doc->loadHTMLFile($path);
    			$title = $doc->getElementsByTagName("title")->item(0)->nodeValue;
    			return $title;
    		}
    		public static function breadcrumb(){
    			$path = explode("/",$_SERVER["PHP_SELF"]);
    			$newPath = $path[0]."/";
    			$breadcrumb = array();
    			$breadcrumb[0] = array("TITLE" => Navigation::getTitle($newPath), "PATH" => $newPath);
    			for($i=1;$i<count($path)-1;$i++){
    				$newPath = $newPath.$path[$i]."/";
    				$breadcrumb[] = array("TITLE" => Navigation::getTitle($newPath."index.php"), "PATH" => $newPath);
    			}
    			return $breadcrumb;
    		}
    	}
    ?>
    Ma page type
    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    	<head>
    		<title><?php echo $title; ?></title>
    		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    	</head>
    	<body>
    	<?php
    			require_once($_SERVER["DOCUMENT_ROOT"]."/_breadcrumb/libs/class.navigation.php");
    			echo Navigation::getTitle("http://localhost/_breadcrumb/index.php");
    			/*
    			$breadcrumb = Navigation::breadcrumb();
    			for($i=0;$i < count($breadcrumb);$i++){
    	?>
    				<a href="<?php echo $breadcrumb[$i]["PATH"]; ?>"><?php echo $breadcrumb[$i]["TITLE"]; ?></a>
    	<?php
    			}
    			*/
    	?>
    	</body>
    </html>
    Une page de test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    	$title = "Accueil";
    	require_once($_SERVER["DOCUMENT_ROOT"]."/_breadcrumb/include/inc.template.php");
    ?>
    Là, j'ai fais un accès direct à la page que je souhaite et il me retourne des erreurs :
    Warning: DOMDocument::loadHTMLFile(http://localhost/_breadcrumb/index.php) [domdocument.loadhtmlfile]: failed to open stream: HTTP request failed! in C:\inetpub\wwwroot\_breadcrumb\libs\class.navigation.php on line 6

    Warning: DOMDocument::loadHTMLFile() [domdocument.loadhtmlfile]: I/O warning : failed to load external entity "http://localhost/_breadcrumb/index.php" in C:\inetpub\wwwroot\_breadcrumb\libs\class.navigation.php on line 6

    Notice: Trying to get property of non-object in C:\inetpub\wwwroot\_breadcrumb\libs\class.navigation.php on line 7
    Pour info, en usage normale, quand il cherche le tout premier titre, l'url passer est "http://localhost/" et la il trouve bien le titre de la page racine dont le nom est "iisstart.htm" et qui possède bien des balise title dans sont code, d'où mon questionnement si DOMDocument consulte le code du fichier et non celui retourné par le navigateur.

  4. #4
    Membre éclairé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Points : 735
    Points
    735
    Par défaut
    Warning: DOMDocument::loadHTMLFile(http://localhost/_breadcrumb/index.php) [domdocument.loadhtmlfile]: failed to open stream: HTTP request failed! in C:\inetpub\wwwroot\_breadcrumb\libs\class.navigation.php on line 6
    ça ça veut dire qu'il n'arrive pas à trouver 'http://localhost/_breadcrumb/index.php'. Donc, on n'en est même pas à l'étape où se demander s'il interprète le php ou le html généré ici.

    Et je spoile un peu mais c'est le html généré
    Je suis fervent utilisateur de PHP et de jQuery.
    Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web de développeur web dans le Val d'Oise mais aussi plusieurs projets personnels.
    Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, une extension de navigateur pour envoyer l'URL de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc…

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 117
    Points : 67
    Points
    67
    Par défaut
    Si c'est sur le HTML généré alors c'est parfait. Reste juste à savoir pourquoi il ne me trouve pas la page avec cette URL qui est pourtant la bonne. Question peut-être bête mais peut-il accéder la page sur laquelle on est ?

  6. #6
    Membre éclairé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Points : 735
    Points
    735
    Par défaut
    Peux-tu accéder à http://localhost/_breadcrumb/index.php ? (question bête mais bon, au cas où )

    Apparemment, ça peut arriver avec serveur IIS ou serveur avec vérification.

    Il faut passer par http://php.net/manual/fr/function.li...ms-context.php pour rajouter des éléments selon configuration.
    Je suis fervent utilisateur de PHP et de jQuery.
    Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web de développeur web dans le Val d'Oise mais aussi plusieurs projets personnels.
    Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, une extension de navigateur pour envoyer l'URL de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc…

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 117
    Points : 67
    Points
    67
    Par défaut
    Citation Envoyé par Shikiryu Voir le message
    Peux-tu accéder à http://localhost/_breadcrumb/index.php ? (question bête mais bon, au cas où )
    Oui testé et re-testé, d'où mon étonnement que DOMDocument n'arrive pas à accéder à la page.

    Citation Envoyé par Shikiryu Voir le message
    Apparemment, ça peut arriver avec serveur IIS ou serveur avec vérification.

    Il faut passer par http://php.net/manual/fr/function.li...ms-context.php pour rajouter des éléments selon configuration.
    lbxml ça me dit quelque... je me souviens que dans l'exemple que j'ai vu, la personne faisait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $url = 'http://www.google.fr';
     
    libxml_use_internal_errors(true);
     
    $doc = new DOMDocument();
    $doc->loadHTMLFile($url);
     
    libxml_clear_errors();
     
    $title = $doc->getElementsByTagName('title')->item(0);
     
    echo $title->nodeValue;
    Mais je veux toujours testé de tout faire en un minimum de code en enlevant ce qui peut être inutile donc j'avais testé sans ça pour voir et je l'ai oublié. Je vais me renseigner dessus.

Discussions similaires

  1. Index personnalité pour JavaDoc avec code source inclus?
    Par Gary31 dans le forum EDI et Outils pour Java
    Réponses: 0
    Dernier message: 16/06/2010, 11h27
  2. Excel avec code source protégé
    Par ComfortablyNumb dans le forum Langage
    Réponses: 0
    Dernier message: 11/10/2008, 20h01
  3. Pb avec code source "lister les images d'un dossier"
    Par Mimisator dans le forum Langage
    Réponses: 2
    Dernier message: 19/10/2005, 15h25

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