Os scripts da linha de comando PHP estão ignorando as diretivas php.ini e ini_set ('memória_limit',…)

StackOverflow https://stackoverflow.com/questions/1751719

Pergunta

Estou enfrentando o "erro fatal comum: fora da memória (alocados 30408704) (tentei alocar 24 bytes) ..." Erro fatal do PHP. As páginas servidas via Apache não estão exibindo esse comportamento.

Eu tentei o seguinte:

  1. Aumentando o memória_limit em php.ini em um valor muito maior.
  2. Aumentando a memória_limit dentro do próprio script via chamadas para ini_set('memory_limit', -1), ini_set('memory_limit', '-1'), ini_set('memory_limit', 100000000), ini_set('memory_limit', '128M'), etc.
  3. unset()Ing, matrizes e objetos desnecessários para incentivar o coletor de lixo a liberar a memória.
  4. Entrando em contato com o host da web. Eles normalmente são muito capazes e conhecedores, mas também não foram capazes de me ajudar com esse problema.
  5. Eu tentei explicitamente incluindo um arquivo php.ini usando o -c Sinalizador de linha de comando para escolher arquivos php.ini específicos com vários valores.
  6. Eu tentei definir o memória_limit em php.ini usando números brutos de bytes e valores como 64m, 128m, etc.
  7. O provedor de hospedagem foi capaz de executar o script como root sem problemas, mas experimenta o mesmo problema que eu o executando usando meu usuário sem raiz. Talvez haja algum tipo de questão de permissões envolvidas?

Independentemente do que eu tento, a mensagem de erro é a mesma. Parece que meus scripts de linha de comando estão ignorando mudanças para memory_limit.

Costumo tentar garantir que meus scripts sejam eficientes em memória, mas atualmente estou precisando analisar grandes quantidades de HTML via Simples html dom E é no analisador que estou enfrentando problemas de memória. Na tentativa de reduzir a pegada de memória do script, eu tentei usar Domdocument em vez de. Isso também não ajuda. De fato, o erro fora da memória agora é acionado em outras partes do script.

Minha pergunta: alguém já experimentou esse ou um problema semelhante? você tem alguma recomendação?

Obrigada.

Foi útil?

Solução

Acontece que o problema foi causado pela proteção contra bombas da Shell Fork sendo ativada no servidor que estava colocando um limite de memória rígida em todos os scripts da linha de comando. Isso foi ativado pelo meu host da web sem meu conhecimento.

Outras dicas

Seu PHP na CLI pode estar usando um php.ini diferente para o seu Apache PHP. tente um phpinfo() e verifique se está usando o arquivo ini que você acha que está usando.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top