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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 117
    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
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    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 149
    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é).

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

    Informations forums :
    Inscription : Octobre 2009
    Messages : 117
    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 émérite

    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
    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é

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

    Informations forums :
    Inscription : Octobre 2009
    Messages : 117
    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 émérite

    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
    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.

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