Можно ли проверить синтаксис PHP-файла из PHP? - PullRequest
12 голосов
/ 30 июля 2009

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

Автозагрузка успешно сообщит о пропущенных файлах, чтобы логика приложения могла это обработать Но если эти файлы повреждены, то вся обработка останавливается с пустым экраном для пользователя и «Ошибка синтаксического анализа 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)

Мысли

Ответы [ 4 ]

4 голосов
/ 30 июля 2009

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

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

На мой взгляд, почти любое решение лучше, чем проверять его во время выполнения!


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


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

3 голосов
/ 26 апреля 2012

Еще один способ сделать один 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 .......

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

наслаждайся:)

0 голосов
/ 11 февраля 2014

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

0 голосов
/ 30 июля 2009

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...