Pregunta

Carga dinámicamente archivos de clase PHP con carga automática. Y esos archivos pueden faltar o estar dañados por algún motivo.

La carga automática informará con éxito los archivos faltantes, por lo que la lógica de la aplicación podría manejar eso. Pero si esos archivos están dañados, todo el procesamiento se detiene con una pantalla en blanco para el usuario y " PHP Parse error: error de sintaxis " en el registro de errores.

¿Es posible verificar la sintaxis del archivo PHP desde el código PHP?

He buscado aquí: http: // us. php.net/manual/en/function.php-check-syntax.php - está en desuso.

Y

exec("php -l $file");

parece ser una forma incorrecta ( http://bugs.php.net/bug .php? id = 46339 )

¿Pensamientos?

¿Fue útil?

Solución

Realmente no deberías intentar buscar archivos PHP no correctos en el momento de la ejecución: ¡matará el tiempo de respuesta de tu aplicación!

Una " mejor manera " sería utilizar php -l desde la línea de comandos cuando haya terminado de modificar un script PHP; o inclúyalo en su proceso de compilación si está usando uno; o enchúfelo como un gancho de confirmación previa de SVN si está usando SVN y puede definir SVN hooks .

En mi opinión, ¡casi cualquier solución dada sería mejor que comprobarlo en el momento de la ejecución!


Teniendo en cuenta que los errores como los que usted quiere evitar probablemente no ocurran con frecuencia, probablemente sea mejor ... simplemente dejar que sucedan. Lo único que se hace es: activar los registros y monitorearlos, para poder detectarlos rápidamente cuando hay un problema :-)


Por supuesto, esto no le impide tratar el caso de archivos faltantes; pero eso es un asunto diferente ...

Otros consejos

Otra forma en la que puede crear un archivo php en su directorio raíz llamado     checkSyntax.php

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

ahora, abre tu archivo bashrc para crear un acceso directo para ejecutar este archivo. agregue la siguiente línea para ejecutar checkSyntax.php

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

y ahora vaya a su directorio de origen, haga svn st.

te muestra una lista de archivos, ahora ejecuta fácilmente el comando.

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

esto comprobará todos los archivos que pasan como argumentos.

disfruta :)

En resumen: no puedo ver una manera de hacer esto, pero tengo una idea que podría ser suficiente.

Hay programas de monitoreo de registros o pueden filtrar los registros a través de herramientas estándar para archivos con errores de análisis. Si aparece un archivo, coloque el nombre del archivo villano en una lista negra y su autocargador comprueba antes de cargar en esta lista.

Con este método, la primera vez que se muestre una pantalla en blanco (suponiendo que los informes de error a la salida estén activados en los servidores de producción), la segunda tendrá una página sin el componente defectuoso.

En el autocargador, debe tener una lista o esquema de nomenclatura para tratar siempre de cargar las clases obligatorias (otras formas en que su aplicación podría estar en un estado inconsistente)

También puede hacer algunas pruebas unitarias, donde carga el PHP que está ejecutando dinámicamente y afirma que exec (" php -l $ fileName ") es válido. Si hiciera eso, podría verificarlo una vez en sus pruebas, generándolo con las variables apropiadas y tener un nivel razonable de confianza de que su PHP era bueno.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top