Frage

In einem Projekt arbeite ich zur Zeit für, wir setzen unter Berücksichtigung system() in der php.ini disable_functions Erklärung. Nun, ein Meta-Modul von uns, die letztlich auch zum Opfer dieser Beschränkung fallen würden, ist Syntax-Überprüfung von Dateien mit system("php -l"); Anrufen -. Auffordern mich auf der Jagd nach Alternativen

Stellt sich heraus, es verwendet, um eine php_check_syntax() , aber nicht nur, dass sein, dass nicht beschränken sich lediglich Syntaxprüfung und ging auf die Datei zu schließen, wenn es syntaktisch gültig ist, aber es ist seit PHP 5.0.5 entfernt. Das Handbuch schlägt php -l an seinem Platz, aber wenn man bedenkt, dass ich sicher, dass Systemaufruf Funktionen in PHP bin zu deaktivieren ist eine ziemlich gängige Praxis, ich frage mich, ob es eine akzeptierte, ‚besseren‘ Art und Weise der Syntaxprüfung PHP-Dateien direkt von PHP-Dateien .

(Ich bin nicht versessen auf diese, durch die Art und Weise, a. ‚Nein‘ vollkommen ausreichend (und ich es erwarten, wirklich) Wir können Angebote solange Vorrat reicht das Modul von dieser Einschränkung - aber ich frage diese Frage sowohl aus Neugier als auch in der Hoffnung auf eine anmutige Lösung.)

War es hilfreich?

Lösung

ich eine Alternative fand mit PECL runkit_lint_file () .

Es hat die gleiche Kontrolle wie php_check_syntax ().

Ich denke, es ist ein Blick wert.

Andere Tipps

Dies kann auch eine Option sein: Wenn (wenn überhaupt) ist eval nicht böse?

Und scheint schneller:

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

Sehen Sie unsere PHP Formatter . Dieses Befehlszeilenprogramm nimmt eine wohlgeformte PHP-Datei und Formate es schön.

Nicht nur, dass es formatiert werden, ist es auch Syntaxprüfung und kehrt Befehl Statuszeile Sie sagen, ob die Datei „wohlgeformt“ wurde; es enthält einen vollständigen PHP 5-Parser. Da es sich um ein Kommandozeilen-Tool ist, wäre es einfach, von einem PHP-Skript zum Start, wenn das, was Sie tun müssen, und von den zurückgegebenen Statusprüfung Sie wissen würde, wenn die Datei legal war.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top