Eu criei uma função que localiza todos os URLs em um arquivo html e repete o mesmo processo para cada conteúdo html vinculado aos URLs descobertos. A função é recursiva e pode continuar indefinidamente. No entanto, limitei a recursão ao definir uma variável global que faz com que a recursão pare após 100 recursões.
No entanto, php retorna este erro:
Erro fatal: nível máximo de aninhamento de função de '100' atingido, abortando! em D: \ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php na linha 1355
Encontrei uma solução aqui: Aumentar o limite de chamadas da função de aninhamento, mas isso não está funcionando no meu caso.
Estou citando uma das respostas do link mencionado acima. Por favor, considere isso.
"Você possui o Zend, o IonCube ou o xDebug instalado? Nesse caso, provavelmente é de onde você está recebendo esse erro.
Eu me deparei com isso há alguns anos atrás, e acabou sendo o Zend colocando esse limite lá, não o PHP. É claro que removê-lo permitirá que você ultrapasse as 100 iterações, mas acabará atingindo os limites de memória. "
Existe uma maneira de aumentar o nível máximo de aninhamento de funções no PHP
Respostas:
Aumente o valor do
xdebug.max_nesting_level
seuphp.ini
fonte
xdebug.max_nesting_level = -1
Uma solução simples resolveu meu problema. Eu apenas comentei esta linha:
no meu
php.ini
arquivo Esta extensão estava limitando a pilha para100
que eu a desabilitei. A função recursiva agora está funcionando como previsto.fonte
Em vez de fazer chamadas de função recursivas, trabalhe com um modelo de fila para nivelar a estrutura.
Existem diferentes maneiras de lidar com isso. Você pode acompanhar mais informações se precisar de algumas dicas sobre a origem ou os caminhos percorridos. Também existem filas distribuídas que podem funcionar com um modelo semelhante.
fonte
Outra solução é adicionar
xdebug.max_nesting_level = 200
no seu php.inifonte
ini_set('xdebug.max_nesting_level', 200);
Em vez de desativar o xdebug, você pode definir o limite mais alto como
fonte
Também é possível corrigir isso diretamente no php, por exemplo, no arquivo de configuração do seu projeto.
ini_set('xdebug.max_nesting_level', 200);
fonte
Entre no seu arquivo de configuração php.ini e altere a seguinte linha:
para algo como:
fonte
no Ubuntu usando PHP 5.59:
chegou ao `:
e encontre seu xdebug.ini nesse diretório, no meu caso é 20-xdebug.ini
e adicione esta linha `
ou isto
defina-o como -1 e você não precisa se preocupar em alterar o valor do nível de aninhamento.
`
fonte
provavelmente aconteceu por causa do xdebug.
Tente comentar a seguinte linha no seu "php.ini" e reinicie o servidor para recarregar o PHP.
";xdebug.max_nesting_level"
fonte
Tente procurar em /etc/php5/conf.d/ para ver se existe um arquivo chamado xdebug.ini
max_nesting_level é 100 por padrão
Se não estiver definido nesse arquivo, adicione:
até o final da lista para que fique assim
você pode usar o teste de @ Andrey antes e depois de fazer essa alteração para ver se funcionou.
fonte
.ini
arquivo separado . A propósito, quando você executa o php5-fpm, esse arquivo provavelmente está em algum lugar aqui:/etc/php5/fpm/conf.d/20-xdebug.ini
php.ini:
Não tenho certeza se o valor excederá o valor -1, mas nunca atingirá -1 ou definirá o max_nesting_level bastante alto.
fonte
Você pode converter seu código recursivo em um código iterativo, que simula a recursão. Isso significa que você precisa enviar o status atual (url, documento, posição no documento etc.) para uma matriz, quando você acessa um link, e removê-lo da matriz, quando esse link é concluído.
fonte
Você pode tentar mover o aninhamento implementando trabalhadores paralelos (como na computação em cluster) em vez de aumentar o número de chamadas de função de aninhamento.
Por exemplo: você define um número limitado de slots (por exemplo, 100) e monitora o número de "trabalhadores" atribuídos a cada um deles. Se algum slot ficar livre, você coloca os trabalhadores em espera "neles".
fonte
Verifique a recursão na linha de comando:
se resultado> 100 ENTÃO verifique o limite de memória;
fonte
Se você estiver usando o Laravel, faça
Isso deve ser trabalho.
fonte
PS Altere 9999 para o número que desejar.
fonte
Ocorreu um erro ao instalar muitos plugins. Portanto, o erro 100 mostrou a localização do último plug-in em que eu instalei C: \ wamp \ www \ mysite \ wp-content \ plugins \ "..." e excluí esse plug-in pasta na unidade C: então tudo voltou ao normal.Eu acho que tenho que limitar a quantidade de plug-in que instalo ou ativei. boa sorte espero que ajude
fonte
No seu caso, é definitivamente a instância do rastreador que possui mais limites Xdebug para rastrear informações de erro e depuração.
Mas, em outros casos, também erros como no PHP ou arquivos principais como as bibliotecas CodeIgniter criarão esse caso e, se você aumentar a configuração do nível de depuração x, ele não desaparecerá.
Então, examine seu código com cuidado :).
Aqui estava o problema no meu caso.
Eu tinha uma classe de serviço que é uma biblioteca no CodeIgniter. Tendo uma função dentro como esta.
Meu controlador da seguinte forma:
A chamada de função na última linha estava incorreta por causa do erro de digitação. Em vez disso, deveria ter sido como abaixo:
Então eu estava recebendo a mensagem de erro exceder. Mas eu desativei o XDebug, mas não ajudei. De qualquer forma, verifique o nome da sua classe ou seu código para obter uma chamada de função adequada.
fonte
Eu tive esse problema com o WordPress na cloud9. Acontece que foi o plugin W3 Caching. Desativei o plugin e funcionou bem.
fonte
Outra solução se você estiver executando o script php na CLI (cmd)
O arquivo php.ini que precisa ser editado é diferente nesse caso. Na minha instalação do WAMP, o arquivo php.ini carregado na linha de comando é:
em vez de \ wamp \ bin \ apache \ apache2.4.9 \ bin \ php.ini, que é carregado quando o php é executado no navegador
fonte
Você também pode modificar a função {debug} em modifier.debug_print_var.php, para limitar sua recursão em objetos.
Por volta da linha 45, antes:
Depois de :
Dessa forma, o Xdebug ainda se comportará normalmente: limite a profundidade da recursão em var_dump e assim por diante. Como este é um problema inteligente, não um problema do Xdebug!
fonte
Eu tive o mesmo problema e reslove assim:
Abra o arquivo my.ini do MySQL
Na seção [mysqld], adicione a seguinte linha: innodb_force_recovery = 1
Salve o arquivo e tente iniciar o MySQL
Remova a linha que você acabou de adicionar e salve
fonte