Вопрос

В проекте я сейчас работаю, мы рассматриваем system() в php.ini disable_functions Декларация. Теперь один метамомодуль наших, которые в конечном итоге также стали бы осеньте жертву на это ограничение, являются синтаксическими файлами с system("php -l"); Звонки - побуждая меня охотиться на альтернативы.

Оказывается, раньше было php_check_syntax(), но не только это не ограничивало себя просто проверять синтаксис и включил файл, если он был синтаксически действительным, но он был удален по состоянию на PHP 5,0,5. Руководство предлагает php -l На своем месте, но учитывая, что я уверен, что отключение функций системы вызова в PHP является довольно распространенной практикой, мне интересно, если есть принятый, «лучший» способ синтаксиса проверяет файлы PHP из файлов PHP.

(Я не ад-согнул на этом, кстати; «нет» отлично хватает (и я ожидаю, правда). Мы могу Опция модуля из этого ограничения - но я задаю этот вопрос как из любопытства, так и в надежде более изящного решения.)

Это было полезно?

Решение

Я нашел альтернативу, используя PECL runkit_lint_file ().

Это делает тот же чек, как php_check_syntax ().

Я думаю, что стоит посмотреть.

Другие советы

Это может быть также вариант:Когда (если когда-либо) это не зло?

И кажется более быстрее:

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

Увидеть наш PHP Fixatter.. Отказ Этот инструмент командной строки принимает хорошо сформированный PHP-файл и приятно его форматы.

Он не только формат, оно также синтаксические проверки, а также возвращает состояние командной строки, рассказывая о том, был ли файл «хорошо сформирован»; Содержит полный анализатор PHP 5. Поскольку это инструмент командной строки, было бы легко запустить из скрипта PHP, если это то, что вам нужно сделать, и путем проверки возвращенного статуса вы знаете, был ли файл законным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top