Pergunta

Eu carregar dinamicamente arquivos de classe PHP com carregamento automático. E esses arquivos podem estar ausente ou corrompido por algum motivo.

Autoload irá relatar com sucesso arquivos faltando assim a lógica da aplicação poderia lidar com isso. Mas se esses arquivos estão corrompidos, então toda a paradas de processamento com tela em branco para o utilizador e. "PHP Parse erro: erro de sintaxe" no log de erro

É possível verificar a sintaxe do arquivo PHP a partir do código PHP?

Eu olhei aqui: http: // nós. php.net/manual/en/function.php-check-syntax.php - é obsoleta .

E

exec("php -l $file");

parece ser uma maneira errada ( http://bugs.php.net/bug php? id = 46339 )

Os pensamentos?

Foi útil?

Solução

Você realmente não deve tentar verificar se há arquivos PHP não corresponde à situação em tempo de execução: ele vai matar o tempo de resposta do seu aplicativo

A "melhor maneira" seria usar php -l de linha de comando quando terminar a modificação de um script PHP; ou incluí-lo em seu processo de construção se você estiver usando um; ou ligá-lo como um SVN pre-commit gancho se você estiver usando SVN e pode definir SVN ganchos .

Na minha opinião, quase qualquer solução seria melhor do que verificar se a si mesmo em tempo de execução!


Considerando erros como os que você quer evitar, provavelmente, não vai acontecer muitas vezes, é provavelmente melhor ... apenas deixá-los acontecer.
única coisa é: Registros ativar e monitorá-los, a ser capaz de detectar rapidamente quando tere é um problema: -)


Claro, isso não o impede de lidar com o caso de falta de arquivos; mas isso é uma questão diferente ...

Outras dicas

Outra forma que você pode fazer um arquivo php em seu diretório raiz chamado checkSyntax.php

<?php
for($i=1; $i < count($argv); $i++){
        $temp = "php -l " . $argv[$i];
        $output = exec($temp);
        echo "\n$output";
}
?>

Agora, abra o arquivo bashrc para fazer um atalho para executar esse arquivo. adicionar abaixo da linha para executar checkSyntax.php

alias checkSyntaxErrors='php /root/checkSyntax.php'

e agora Goto seu diretório fonte fazer svn st.

mostra-lhe lista de arquivos, agora facilmente executar o comando.

checkSyntaxErrors file1.php file2.php .......

este irá verificar todos os seus arquivos passando como argumentos.

aproveitar:)

Em resumo:. Eu não posso ver uma maneira de fazer isso, mas tem uma idéia que pode ser suficiente

Existem programas de monitoramento de log ou pode filtrar os registros através de ferramentas padrão para arquivos com erros de análise. Se um aparece de arquivo, você coloca o nome do arquivo vilão em uma lista negra e seus cheques autoloader antes carga contra esta lista.

Com este método, a primeira vez que você vai servir uma tela em branco (por erro de assumig à saída são ativados em servidores de produção), mas o segundo terá uma página sem o componente defeituoso.

No autoloader você deve ter uma lista ou esquema de nomeação para sempre tentar aulas obrigatórias de carga (outras maneiras a sua aplicação pode estar em um estado inconsistente)

Você também pode fazer alguns testes de unidade, onde você carregar o PHP você está executando de forma dinâmica e afirmam que exec ( "php -l $ filename") é válido. Se você fizer isso você seria capaz de verificar isso uma vez em seus testes, gerando-lo com variáveis ??apropriadas, e ter um nível razoável de confiança o seu PHP foi bom.

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