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 ne s'exécute pas dans mon code


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    octobre 2013
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : octobre 2013
    Messages : 350
    Points : 41
    Points
    41
    Par défaut DomDocument ne s'exécute pas dans mon code
    Bonjour.

    J'essaie d'utiliser DomDocument mais quand j'essaie de lancer l'exploration, rien ne s'affiche sur la page web et c'est pareil quand je passe par le terminal de ligne de commande de mon serveur web Local Laragon. J'ai même essayé de débuguer en ajoutant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ini_set("display_errors",1);
    error_reporting(E_ALL);
    tout en haut de mon script, pour constater l'erreur mais NADA; rien ne s'affiche comme erreur.

    Voici le code complet:

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    <?php
    ini_set("display_errors",1);
    error_reporting(E_ALL);
     
    $already_crawled = array();
    $crawling = array();
     
    function get_details($url) {
     
    	$options = array('http'=>array('method'=>"GET"));
    	$context = stream_context_create($options);
    	libxml_set_streams_context($context);
    	libxml_use_internal_errors(true);
     
    	$doc = new DOMDocument;
    	$doc->loadHTMLFile('<?xml encoding="UTF-8">' . $url);
     
    	$title = $doc->getElementsByTagName("title");
    	$title = $title->item(0)->nodeValue;
     
    	return '{ "Title": "'.str_replace("\n", "", $title).'", "URL": "'.$url.'"},';
     
    }
     
    function follow_links($url) {
    	global $already_crawled;
    	global $crawling;
    	$options = array('http'=>array('method'=>"GET", 'headers'=>"User-Agent: howCode/0.1\n"));
    	$context = stream_context_create($options);
    	libxml_set_streams_context($context);
    	libxml_use_internal_errors(true);
     
    	$doc = new DOMDocument;
    	$doc->loadHTMLFile('<?xml encoding="UTF-8">' . $url);
    	$linklist = $doc->getElementsByTagName("a");
    	foreach ($linklist as $link) {
    		$l =  $link->getAttribute("href");
    		if (substr($l, 0, 5) != "https" && substr($l, 0, 4) != "http") {
    			$l = parse_url($url)["scheme"]."://".parse_url($url)["host"]."/".$l;
    		}
    		if (!in_array($l, $already_crawled)) {
    				$already_crawled[] = $l;
    				$crawling[] = $l;
    				echo get_details($l)."\n";
    		}
     
    	}
    	array_shift($crawling);
    	foreach ($crawling as $site) {
    		follow_links($site);
    	}
     
    }
    follow_links("youtube.com");
    Aidez-moi s'il vous plaît à corriger mon Code et réussir à exécuter le crawl. Tout semble correcte de mon côté mais je me demande pourquoi rien ne s'affiche quand je fais http://localhost/test.php ou encore quand je passe par le ligne de commande du terminal du Serveur Web Local Laragon en fait php test.php, même pas la moindre affichage de l'erreur de ce qui ne va pas.

    Merci de m'aider s'il vous plaît.

  2. #2
    Membre chevronné
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    mai 2004
    Messages
    1 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : mai 2004
    Messages : 1 253
    Points : 1 965
    Points
    1 965
    Par défaut
    Bonsoir

    Depuis mon smartphone, je survole ton post et mon regard est attiré par la ligne 53. Il y a un point derrière l'accolade, si c'est aussi comme ça dans ton fichier source, il y a donc une erreur de syntaxe.
    Christophe (cavo789)
    Mes scripts Open Source : https://github.com/cavo789

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    octobre 2013
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : octobre 2013
    Messages : 350
    Points : 41
    Points
    41
    Par défaut
    Merci pour votre réponse mais ce point n'est pas sur le code original. C'est certainement dû à la copie. Mais n'empêche que rien n'a changé. Ça ne marche toujours. Voici la capture d'écran en image: https://ibb.co/89Q7yth

  4. #4
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    mars 2009
    Messages
    2 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : mars 2009
    Messages : 2 481
    Points : 5 506
    Points
    5 506
    Par défaut
    La ligne 16 ou 34 est pas mal non plus:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $doc->loadHTMLFile('<?xml encoding="UTF-8">' . $url);

    DOMDocument a deux méthodes pour charger le contenu HTML, soit DOMDocument::loadHTML qui prend une chaîne de caractères contentant du html, soit DOMDocument::loadHTMLFile qui prend juste une URL vers un contenu HTML. Il semblerait que tu ais mélangé les deux.

    Si tu veux t'assurer que le html est bien parsé en utf-8, charge le contenu du fichier avec l'url et file_get_contents (en lui passant le contexte de flux), puis ensuite utilise DOMDocument::loadHTML avec l'entête xml concaténée au contenu du fichier.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/12/2015, 21h11
  2. [PDO] UPDATE ne fonctionne pas dans mon code PHP
    Par Daethe dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 01/06/2015, 18h02
  3. Un regex qui fonctionne sur les testeurs en ligne, mais pas dans mon code
    Par billybobbonnet dans le forum Développement Windows
    Réponses: 4
    Dernier message: 28/01/2015, 18h20
  4. fonction explode() ne fonctionne pas dans mon code
    Par Invité dans le forum Langage
    Réponses: 12
    Dernier message: 08/02/2013, 11h34
  5. Shell qui ne s'exécute pas dans mon cron
    Par sheira dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 30/12/2010, 15h16

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