Question

Le problème ne se produit qu'avec un fichier lorsque j'essaie d'utiliser une méthode DocumentDOM / SimpleXML. Il semble donc que le problème concerne ce fichier. Aucune idée de ce que cela pourrait être.

Si je fais ce qui suit:

$file = "test1.html";
$dom = DOMDocument::loadHTMLFile($file);
$xml = simplexml_import_dom($dom);

print_r($xml);

Sous Google Chrome, un "page indisponible" a été ajouté. Erreur. Dans Firefox, je n’obtiens rien.

Si je fais la même chose mais avec un "test2.html", je reçois une impression comme prévu.

Si j'essaie la même chose mais en procédant ainsi:

$file = "test1.html";
$data = file_get_contents($file)
$dom = DOMDocument::loadHTML($data);
$xml = simplexml_import_dom($dom);

print_r($xml);

Je reçois le même problème.

Si je commente la ligne print_r, Chrome passe de la " Page indisponible ". à blanc.

J'ai modifié les autorisations en 777, au cas où cela poserait un problème, pas de solution.

J'ai simplement essayé de faire écho au contenu du code HTML, aucun problème.

Des indices sur les raisons pour lesquelles a) Chrome ferait cela, et b) pourquoi je n'obtiens aucun résultat utilisable?

Mise à jour:

Si je mets dans:     $ file = " test1.html " ;;     $ dom = DOMDocument :: loadHTMLFile ($ fichier);     si (! $ dom) {         echo " No Load! " ;;     }     autre {     $ xml = simplexml_import_dom ($ dom);     print_r ($ xml);     }

J'ai le même problème. Si je mets dedans:

$file = "test1.html";
$dom = DOMDocument::loadHTMLFile($file);
if(!$dom) {
    echo "No Load!";
}
else {
    echo "Load!";
}

Je reçois le "Chargement!" sortie, ce qui signifie que la méthode dom ne devrait pas être le problème (?)

Je vais essayer le même test avec le simplexml.

Update2:

Si je fais cela:

J'ai le même problème. Si je mets dedans:

$file = "test1.html";
$dom = DOMDocument::loadHTMLFile($file);
$xml = simplexml_import_dom($dom);
if(!$xml) {
    echo "No Load!";
}
else {
    echo "Load!";
}

Je reçois " Load! " mais si je le fais:

$file = "test1.html";
$dom = DOMDocument::loadHTMLFile($file);
$xml = simplexml_import_dom($dom);
if(!$xml) {
    echo "No Load!";
}
else {
    echo "Load!";
    print_r($xml);
}

Je reçois l'erreur. J'ai finalement remarqué que j'avais une option pour afficher l'erreur dans Chrome:

 Error 324 (net::ERR_EMPTY_RESPONSE): Unknown error.

Le fichier HTML problématique est de 288 Ko. Cela pourrait-il être le problème? Si oui, comment pourrais-je m'adapter à cela?

Dernière mise à jour:

Très étrange. Je peux utiliser des méthodes et des fonctions sur l'objet (comme simplexml ou domdocument), ainsi je peux faire des choses comme xpath pour supprimer ou analyser le code HTML, etc. Dans certains cas (petits résultats), cela peut faire écho aux résultats, mais pour les gros trucs ( afficher toutes les étendues), il échoue de la même manière.

Donc, depuis le résultat final, je pense que je vais pouvoir tenir dans ces paramètres, je devrais aller bien (je suppose).

Mais toute solution réelle est la bienvenue.

Était-ce utile?

La solution

  • Activer le signalement des erreurs: rapport_erreur (E_ALL); dans la première ligne de votre code PHP.
  • Vérifiez la limite de mémoire de votre configuration PHP: limite_mémoire dans le fichier php.ini correspondant
  • Quelle est la différence entre test1.html et test2.html? Peut-être que test1.html n’est pas bien formé.

Autres conseils

DocumentDOM et / ou SimpleXML peuvent être mis hors service si le document est mal formé. Essayez quelque chose comme:

$dom = DOMDocument::loadHTMLFile($file);
if (!$dom) {
    echo 'Loading file failed';
    exit;
}

$xml = simplexml_import_dom($dom);
if (!$xml) {
    ...
}

Si la création de $ dom fonctionne, la conversion en $ xml devrait également fonctionner, mais assurez-vous quand même.

Éditer: comme Gehrig l’a dit, assurez-vous que le rapport d’erreur est activé, cela devrait indiquer clairement l’échec du processus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top