A configuração do caminho de inclusão no PHP falha intermitentemente
-
09-06-2019 - |
Pergunta
Eu tentei ambos:
ini_set('include_path', '.:/usr/share/php5:/usr/share/php5/PEAR:lib:app/classes');
e também :
php_value include_path ".:/usr/share/php5:/usr/share/php5/PEAR:lib:app/classes"
no arquivo .htaccess.
Ambos os métodos, na verdade trabalhe mas apenas intermitentemente.Ou seja, eles funcionarão bem para solicitações de cerca de 37 páginas e, em seguida, falharão em solicitações de cerca de 42 páginas, resultando em uma chamada require() para causar um erro fatal, travando efetivamente o site.
Eu nem sei por onde começar a tentar descobrir o que está acontecendo!
@nota
Parece que você duplicou o diretório atual no caminho de inclusão.Tente remover um dos '.:' da sua string.
A versão no script foi originalmente
ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . 'lib' . PATH_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'classes');
e assim o .:.:estava vindo do caminho existente:
ini_get('include_path')
Tentei removê-lo mesmo assim e o problema persiste.
Solução
Acontece que o problema estava relacionado a um bug do PHP na versão 5.2.5
Definir um "admin_flag" para include_path fez com que o caminho de inclusão ficasse vazio em algumas solicitações, e o Plesk definiu um admin_flag na configuração padrão para uma coisa ou outra.Uma atualização do PHP resolveu o problema.
Outras dicas
Você tentou set_include_path()?.Como benefício, isso retorna falso em caso de falha, permitindo pelo menos capturar a ocorrência e gerar alguns dados de depuração significativos.Além disso, você deve usar a constante PATH_SEPARATOR
pois difere entre windows/*nix.
Como um exemplo específico:
set_include_path('.' . PATH_SEPARATOR . './app/lib' . PATH_SEPARATOR . get_include_path());
(o get_include_path() no final significa que o caminho ini/htaccess definido permanecerá)
Parece que você duplicou o diretório atual no caminho de inclusão.Tente remover um dos '.:' da sua string.