Question

Dans un projet, je travaille actuellement, nous envisageons de mettre system() disable_functions déclaration de php.ini. Maintenant, un méta-module de la nôtre qui en fin de compte aussi être victimes de cette restriction est des fichiers avec vérification de la syntaxe des appels system("php -l"); -. Ce qui m'a incité à la chasse aux alternatives

Turns là-bas utilisé pour un php_check_syntax() , mais non seulement n'a pas que restreindre lui-même pour une simple vérification de syntaxe et a continué à inclure le fichier si elle était syntaxiquement valide, mais il a été supprimé à partir de PHP 5.0.5. Le manuel suggère php -l à sa place, mais étant donné que je suis la désactivation que les fonctions d'appel du système en PHP est une pratique assez courante, je me demande s'il y a une acceptée, « meilleure » façon de vérification de la syntaxe des fichiers PHP à partir des fichiers PHP .

(Je ne suis pas un puriste à ce sujet, par le chemin,. « Non » suffit parfaitement (et je pense, vraiment) Nous peut excempt le module de cette restriction - mais Je pose cette question à la fois par curiosité, ainsi que dans l'espoir d'une solution plus élégante.)

Était-ce utile?

La solution

I a trouvé une alternative utilisant PECL runkit_lint_file () .

Il fait la même vérification que php_check_syntax ().

Je pense que ça vaut un coup d'oeil.

Autres conseils

Cela peut aussi être une option: Quand (si jamais) est eval pas mal?

Et semble plus rapide:

$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.

Voir notre PHP Formatter. Cet outil de ligne de commande prend un fichier PHP bien formé et formate bien.

Non seulement formater, il vérifie également la syntaxe, et commande renvoie l'état de ligne vous indiquant si le fichier était « bien formé »; il contient un analyseur complet PHP 5. Parce qu'il est un outil de ligne de commande, il serait facile de lancer à partir d'un script PHP si c'est ce que vous devez faire, et en vérifiant l'état retourné vous sauriez si le fichier était légal.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top