Подтвердить что ты не робот

Можно ли проверить PHP-синтаксис PHP с PHP?

Я загружаю динамически файлы классов PHP с автозагрузкой. И эти файлы могут отсутствовать или повреждаться по какой-то причине.

Autoload будет успешно сообщать о недостающих файлах, поэтому логика приложения может справиться с этим. Но если эти файлы повреждены, то вся обработка останавливается с пустым экраном для пользователя и "Ошибка анализа PHP: синтаксическая ошибка" в журнале ошибок.

Можно ли проверить синтаксис PHP файла из PHP-кода?

Я посмотрел здесь: http://us.php.net/manual/en/function.php-check-syntax.php - он устарел.

и

exec("php -l $file");

кажется неправильным (http://bugs.php.net/bug.php?id=46339)

Мысли?

4b9b3361

Ответ 1

Вы действительно не должны пытаться проверять неверные файлы PHP во время выполнения: он убьет время отклика вашего приложения!

"Лучшим способом" было бы использовать php -l из командной строки, когда вы закончите модификацию PHP script; или включить его в процесс сборки, если вы используете его; или подключить его как связной привязкой SVN, если вы используете SVN и можете определить SVN hooks.

По-моему, почти любое данное решение было бы лучше, чем проверять себя во время выполнения!


Рассмотрение ошибок, подобных тем, которые вы хотите избежать, вероятно, не будет происходить часто, возможно, лучше... просто позвольте им произойти.
ONLY вещь: активировать журналы и следить за ними, быстро обнаруживать, когда возникает проблема: -)


Конечно, это не мешает вам разобраться с случаем отсутствия файлов; но это другое дело...

Ответ 2

Другой способ сделать один php файл в корневом каталоге   checkSyntax.php

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

откройте файл bashrc, чтобы создать ярлык для запуска этого файла. добавьте строку ниже, чтобы запустить checkSyntax.php

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

и теперь перейдите в исходный каталог svn st.

он показывает список файлов, теперь легко запускает команду.

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

это проверит все ваши файлы, переданные в качестве аргументов.

наслаждайтесь:)

Ответ 3

Вкратце: я не вижу способа сделать это, но имею идею, которая может быть достаточной.

Существуют программы мониторинга журналов или могут фильтровать журналы через стандартные инструменты для файлов с ошибками разбора. Если файл появляется, вы помещаете имя файла злодея в черный список, и ваш автозагрузчик проверяет перед загрузкой этого списка.

С помощью этого метода в первый раз вы будете обслуживать пустой экран (при условии, что отчет об ошибках на выходе будет включен на рабочих серверах), но второй будет иметь страницу без неисправного компонента.

В автозагрузчике вы должны иметь схему списка или именования, чтобы всегда пытаться загружать обязательные классы (другими способами ваше приложение может находиться в несогласованном состоянии)

Ответ 4

Вы также можете выполнить некоторые модульные тесты, где вы загружаете PHP, который вы динамически выполняете, и утверждаете, что exec ( "php -l $fileName" ) действителен. Если вы это сделали, вы сможете проверить его один раз в своих тестах, создав его с соответствующими переменными и получив разумный уровень уверенности в том, что ваш PHP хорош.