J'ai créé une fonction qui trouve toutes les URLs dans un fichier html et répète le même processus pour chaque contenu html lié aux URLs découvertes. La fonction est récursive et peut se poursuivre à l'infini. Cependant, j'ai mis une limite à la récursion en définissant une variable globale qui fait que la récursion s'arrête après 100 récursions.
Cependant, php renvoie cette erreur :
Erreur fatale : Le niveau maximal d'imbrication des fonctions de '100' est atteint, abandon ! in D:\wamp\www\crawler1\simplehtmldom_1_5\simple_html_dom.php sur la ligne 1355
J'ai trouvé une solution ici : Augmentation de la limite d'appels de fonctions imbriquées mais cela ne fonctionne pas dans mon cas.
Je cite l'une des réponses du lien mentionné ci-dessus. Veuillez en tenir compte.
"Avez-vous installé Zend, IonCube ou xDebug ? Si c'est le cas, c'est probablement à partir de là que vous obtenez cette erreur.
J'ai rencontré ce problème il y a quelques années, et c'est Zend qui a mis cette limite, pas PHP. Bien sûr, l'enlever vous permettra de dépasser les 100 itérations, mais vous finirez par atteindre les limites de mémoire."
Existe-t-il un moyen d'augmenter le niveau maximal d'imbrication des fonctions en PHP ?
2 votes
Aussi : PHP n'a pas de limite pour les appels de fonctions imbriquées, ce doit être une extension que vous utilisez qui cause ce problème.
0 votes
@Abel Je suis sûr que mon code ne comporte aucune erreur. Il existe une variable statique qui incrémente sa valeur de un à chaque appel récursif. Si cette variable est inférieure à 100, les appels récursifs se poursuivent jusqu'à ce que la variable atteigne 100. Je veux dire que la variable atteignant 100 est en fait le cas de base. Alors que l'erreur survient avant 100 récursions. Et comme vous avez mentionné qu'une extension peut être à l'origine de ce problème, je voudrais mentionner que j'utilise des fonctions de simple_html_dom.php. Si vous avez une idée sur simple_html_dom.php, veuillez m'aider à cet égard. Veuillez vous référer à la question mise à jour.
7 votes
C'est une erreur de xdebug. D'après la capture d'écran, il est visible que vous utilisez xdebug. Vous pouvez désactiver ce paramètre ici : xdebug.max_nesting_level ou indiquer la taille du niveau d'imbrication.
3 votes
Si vous utilisez WAMP, notez que la désactivation de xdebug dans le php.ini ne fonctionne PAS toujours ; il en va de même pour l'extension du niveau d'imbrication autorisé ; un bug à supposer ; SOLUTION : allez dans le php.ini et commentez php_xdebug- ???.dll
0 votes
Duplicata possible de Augmentation de la limite d'appel des fonctions d'imbrication
0 votes
Je viens de rencontrer ce problème en utilisant un algorithme récursif sur un grand ensemble de données. Aucune valeur pour max_nesting_level n'est assez grande dans mon cas et j'ai dû trouver une méthode non récursive pour faire la même chose. Cela a pris plus de temps, mais le processus a été mené à bien.