Можно ли проверить синтаксис файла PHP из PHP?
-
05-07-2019 - |
Вопрос
Я динамически загружаю файлы классов 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)
Мысли?
Решение
Вам действительно не следует пытаться проверять наличие неправильных PHP-файлов во время выполнения :это сократит время отклика вашего приложения!
"Лучшим способом" было бы использовать php -l из командной строки, когда вы закончите изменять PHP-скрипт ;или включите его в свой процесс сборки, если вы его используете ;или подключите его как перехват предварительной фиксации SVN, если вы используете SVN и можете определить SVN - крючки.
На мой взгляд, почти любое данное решение было бы лучше, чем проверять это самостоятельно во время выполнения !
Учитывая, что ошибки, подобные тем, которых вы хотите избежать, вероятно, будут случаться не часто, вероятно, лучше это сделать...просто позвольте им случиться.
Единственное, что есть :активируйте журналы и отслеживайте их, чтобы иметь возможность быстро обнаруживать, когда возникает проблема :-)
Конечно, это не мешает вам иметь дело со случаем отсутствия файлов ;но это совсем другое дело...
Другие советы
Другим способом вы можете создать один 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 .......
это проверит все ваши файлы, передаваемые в качестве аргументов.
наслаждайтесь :)
Короче говоря:я не вижу способа сделать это, но у меня есть идея, которой может быть достаточно.
Существуют программы мониторинга журналов или они могут фильтровать журналы с помощью стандартных инструментов на предмет файлов с ошибками синтаксического анализа.Если файл появляется, вы помещаете имя файла villain в черный список, и ваш автозагрузчик проверяет перед загрузкой соответствие этому списку.
С помощью этого метода в первый раз вы будете отображать пустой экран (предполагается, что сообщения об ошибках для вывода включены на производственных серверах), но во второй раз страница будет без неисправного компонента.
В автозагрузчике у вас должен быть список или схема именования, чтобы всегда пытаться загружать обязательные классы (другими способами ваше приложение может находиться в несогласованном состоянии)
Вы также могли бы провести некоторое модульное тестирование, где вы загружаете PHP, который вы динамически выполняете, и утверждаете, что exec("php -l $fileName") является допустимым.Если бы вы сделали это, вы смогли бы проверить это один раз в своих тестах, сгенерировав его с соответствующими переменными, и имели бы разумный уровень уверенности в том, что ваш PHP был хорош.