2009-07-30 10 views
11

Cargo dinámicamente archivos de clase PHP con autocarga. Y esos archivos pueden estar perdidos o dañados por alguna razón.¿Es posible verificar la sintaxis del archivo PHP desde PHP?

Autoload informará con éxito de los archivos que faltan por lo que la lógica de la aplicación podría manejar eso. Pero si esos archivos están dañados, entonces el proceso completo se detiene con una pantalla en blanco para el usuario y "Error de PHP Parse: error de sintaxis" en el registro de errores.

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

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

Y

exec("php -l $file"); 

parece que hay un camino equivocado (http://bugs.php.net/bug.php?id=46339)

Pensamientos?

+4

¿Realmente considera verificar la sintaxis de cada archivo que desea incluir cada vez que se ejecuta una secuencia de comandos? – Gumbo

+0

No exactamente. Tengo un tipo especial de clases que podrían estar potencialmente dañadas, no todas. –

Respuesta

6

realidad, no debería tratar de comprobar la no correcta Archivos PHP en tiempo de ejecución: ¡matará el tiempo de respuesta de su aplicación!

Una "mejor manera" sería usar php -l desde la línea de comandos cuando termine de modificar un script PHP; o incluirlo en tu proceso de compilación si estás usando uno; o conéctelo como un gancho de precompilación de SVN si está utilizando SVN y puede definir SVN hooks.

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


Teniendo en cuenta que los errores como los que desea evitar probablemente no sucedan a menudo, es probable que sea mejor ... simplemente déjalos pasar.
cosa sólo es: activar los registros y monitorear ellos, el ser capaz de detectar rápidamente cuando tere es un problema :-)


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

+0

Gracias por su respuesta. La respuesta "no, no con un rendimiento razonable" es una opción válida. El gancho precompromiso de SVN es una gran idea y creo que resolverá nuestro problema en la mayoría de los casos. –

+0

De nada :-) OK sobre svn pre-commit hook: cuando eres administrador del servidor SVN, ¡los ganchos son realmente geniales de usar! –

0

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

Existen 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, coloca el nombre del villano en una lista negra y su autocargador comprueba antes de cargarlo en esta lista.

Con este método, en primer lugar, se mostrará una pantalla en blanco (los informes de error de suposición se activarán en los servidores de producción) pero el segundo tendrá una página sin el componente defectuoso.

En el cargador automático debe tener un esquema de lista o nombrando a tratar siempre de la carga de clases obligatorias (otras maneras en que su aplicación podría estar en un estado incoherente)

+0

Supuse que él (su sistema) no tiene control sobre esos archivos en tiempo de compilación. –

+0

Idea interesante, aunque creo que no es bueno hacer una comprobación de sintaxis en función del usuario que visita el sitio. Aunque solo el primero obtenga la página en blanco. –

2

Otra forma puede hacer que un archivo php en el directorio raíz llamada checkSyntax.php

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

ahora, abrir su archivo .bashrc para hacer un acceso directo para ejecutar este archivo . agregue la línea siguiente para ejecutar checkSyntax.php

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

y ahora goto su directorio fuente do svn st.

le muestra la lista de archivos, ahora ejecute fácilmente el comando.

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

esto verificará todos sus archivos pasando como argumentos.

disfrutar :)

0

También podría hacer algunas pruebas unitarias, donde se carga el PHP que está ejecutando de forma dinámica y afirman que exec ("php -l $ nombre de archivo") es válida. Si lo hiciera, podría verificarlo una vez en sus pruebas, generarlo con variables apropiadas y tener un nivel de confianza razonable de que su PHP era bueno.

Cuestiones relacionadas