[RESOLU] DomDocument ne s'exécute pas dans mon code. Aidez-moi svp

Eléphant du PHP | 137 Messages

11 nov. 2021, 21:31

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 : Tout sélectionner

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 : Tout sélectionner

<?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.
Modifié en dernier par chegmarco le 11 nov. 2021, 21:58, modifié 1 fois.

Mammouth du PHP | 2703 Messages

11 nov. 2021, 21:40

il faut commencer par faire marcher :
$doc = new DOMDocument;
$test = $doc->loadHTMLFile('<?xml encoding="UTF-8">' . $url);
if($test){
echo "cela fonctionne";
}
else{
echo "non";
}

Eléphant du PHP | 137 Messages

11 nov. 2021, 22:06

il faut commencer par faire marcher :
$doc = new DOMDocument;
$test = $doc->loadHTMLFile('<?xml encoding="UTF-8">' . $url);
if($test){
echo "cela fonctionne";
}
else{
echo "non";
}
C'est fait et rien n'a changé. Voici la capture d'écran en image: https://ibb.co/89Q7yth

Mammouth du PHP | 2703 Messages

11 nov. 2021, 22:10

quel est le code de retour http (visible dans la console) ?

Eléphant du PHP | 137 Messages

11 nov. 2021, 22:16

quel est le code de retour http (visible dans la console) ?
Console vierge. Voir la capture ici: https://ibb.co/QntQwbs.
Ou encore via "Réseau=>Réponse:" https://ibb.co/f2fsPhX

Mammouth du PHP | 2703 Messages

11 nov. 2021, 22:27

il faut recharger la page pour obtenir le code de retour.

Mammouth du PHP | 2703 Messages

11 nov. 2021, 22:32

et ainsi:
echo "avant";
follow_links("youtube.com");
echo "apres";
cela donne quoi ?

Eléphant du PHP | 137 Messages

11 nov. 2021, 22:37

et ainsi:
echo "avant";
follow_links("youtube.com");
echo "apres";
cela donne quoi ?
Ça retourne juste avantapres. Voici ce que ça retourne en capture d'écran: https://ibb.co/qFJ82ss

Mammouth du PHP | 2703 Messages

11 nov. 2021, 22:41

et ainsi ?
function follow_links($url) {
$doc = new DOMDocument;
$test = $doc->loadHTMLFile('<?xml encoding="UTF-8">' . $url);
if($test){
echo "cela fonctionne";
}
else{
echo "non";
}
}

Eléphant du PHP | 137 Messages

11 nov. 2021, 22:48

et ainsi ?
function follow_links($url) {
$doc = new DOMDocument;
$test = $doc->loadHTMLFile('<?xml encoding="UTF-8">' . $url);
if($test){
echo "cela fonctionne";
}
else{
echo "non";
}
}

Ça retourne non. Capture: https://ibb.co/4FWH6Bh

Mammouth du PHP | 2703 Messages

11 nov. 2021, 22:49

reste plus qu'à lire la doc et à passer en paramètre ce qui est attendu par loadHTMLFile

Eléphant du PHP | 137 Messages

11 nov. 2021, 23:03

reste plus qu'à lire la doc et à passer en paramètre ce qui est attendu par loadHTMLFile
Mais la Documentation de https://www.php.net/manual/fr/domdocume ... mlfile.php dit que loadHTMLFile prend en paramètre le fichier HTML chargé à partir d'un fichier. L'exemple sur la Doc, c'est:

Code : Tout sélectionner

$doc = new DOMDocument(); $doc->loadHTMLFile("filename.html");
Et c'est pourquoi, je lui ai passé moi en paramètre la variable "$url" qui représente "youtube.com". Sinon, je devrais donc mettre quoi selon vous en lieu et place de youtube.com ???

Mammouth du PHP | 2703 Messages

11 nov. 2021, 23:05

$test = $doc->loadHTMLFile('<?xml encoding="UTF-8">' . $url);
ne passe pas en paramètre youtube.com quand $url vaut youtube.com

Eléphant du PHP | 137 Messages

11 nov. 2021, 23:13

$test = $doc->loadHTMLFile('<?xml encoding="UTF-8">' . $url);
ne passe pas en paramètre youtube.com quand $url vaut youtube.com
Mais le résultat est pareil que quand je fais: $test = $doc->loadHTMLFile($url);

C'est pourquoi je suis ici et surtout pourquoi j'ai posté l'intégralité du code. Si donc loadHTMLFile ne prend pas comme argument youtube.com qui vaut $url, que devrais donc lui passer ???
Parce-que à ce que je sache youtube.com est la page que je cherche à récupérer via DomDocument.

Mammouth du PHP | 2703 Messages

11 nov. 2021, 23:19

il faut passer une url.
vu que cela affiche non, j'en conclus que youtube.com n'est pas une url, et oui youtube.com n'est pas une url.