Вопрос

Я динамически загружаю файлы классов 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 был хорош.

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