Pregunta

En un proyecto que estoy trabajando actualmente para, estamos considerando poner system() disable_functions declaración de php.ini. Ahora, un meta-módulo de la nuestra, que en última instancia, también serían víctimas de esta restricción es la sintaxis de comprobación de archivos con llamadas system("php -l"); -. Me llevó a búsqueda de alternativas

Resulta que solía ser un php_check_syntax() , pero no sólo no que limitarse a la mera comprobación de sintaxis y pasó a incluir el archivo si era sintácticamente válida, pero se ha retirado a partir de PHP 5.0.5. El manual sugiere php -l en su lugar, pero dado que estoy seguro de desactivar las funciones de llamada del sistema en PHP es una práctica bastante común, me pregunto si hay una forma aceptada, 'mejor' de comprobación de sintaxis archivos PHP desde el interior de los archivos PHP .

(No estoy empeñado en esto, por cierto;. Un 'no' basta perfectamente (y espero que, en realidad) Nos puede EXIMEN el módulo de esta restricción - pero estoy haciendo esta pregunta tanto por curiosidad, así como en la esperanza de una solución más elegante.)

¿Fue útil?

Solución

I encontró una alternativa utilizando PECL runkit_lint_file () .

Se hace el mismo cheque como php_check_syntax ().

Creo que es digno de una mirada.

Otros consejos

Esto puede ser también una opción: Cuando (o nunca) es eval no es malo?

Y parece más rápido:

$nTestTiempo0 = microtime(true);
exec('php -l yourfile.php',$arrMsgError,$nCodeError);
$nTestTiempo1 = microtime(true);
echo "\n", '<p>Time in verify file with exec : '.($nTestTiempo1-$nTestTiempo0).' secs.</p>';
//Time in verify file with exec : 0.033198118209839 secs.

$nTestTiempo0 = microtime(true);
ob_start ();
var_dump(eval('return true; if(0){?>'.file_get_contents('yourfile.php').'<?php };'));
$arrMsgError = explode("\n",trim(ob_get_contents()));
ob_end_clean();
$nTestTiempo1 = microtime(true);
echo "\n", '<p>Time in verify file with eval : '.($nTestTiempo1-$nTestTiempo0).' secs.</p>';
//Time in verify file with eval : 0.00030803680419922 secs.

$nTestTiempo0 = microtime(true);
@system('php -l yourfile.php',$nCodeError);
$nTestTiempo1 = microtime(true);
echo "\n", '<p>Time in verify file with system : '.($nTestTiempo1-$nTestTiempo0).' secs.</p>';
//Time in verify file with system : 0.032964944839478 secs.

Vea nuestra PHP formateador . Esta herramienta de línea de comando toma un archivo y lo formatea Nicely PHP bien formada.

No sólo formato, también comprobaciones de sintaxis, y vuelve comando de estado línea de tiempo que indica si el archivo fue "bien formado"; que contiene un completo analizador de PHP 5. Debido a que es una herramienta de línea de comandos sería fácil de lanzamiento desde un script PHP si eso es lo que hay que hacer, y comprobando el estado devuelto sabría si el archivo fue legal.

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