Проверьте файл PHP на наличие синтаксических ошибок
Я пытаюсь встроить в приложение функцию аудита, которая будет проверять различные проблемы с качеством кода.
Одна из вещей, которые я хотел бы сделать, это проверить определенные файлы PHP на наличие синтаксических ошибок. Я собирался использовать php_check_syntax(), но он был удален в PHP 5.0.5.
Я пытался использовать exec()
заявления, но это ничего не выводит. Я добавил date
Чтобы убедиться exec()
работает:
<?php
error_reporting(E_ALL | E_NOTICE | E_STRICT | E_WARNING);
ini_set('display_errors', 1);
$output = 'before';
var_dump($output);
var_dump(exec('php -l ' . __FILE__, $output));
var_dump($output);
var_dump(exec('date', $output));
var_dump($output);
Выход:
string 'before' (length=6)
string '' (length=0)
array (size=0)
empty
string 'Thu Feb 6 10:42:35 PST 2014' (length=28)
array (size=1)
0 => string 'Thu Feb 6 10:42:35 PST 2014' (length=28)
Как проверить файл PHP на наличие синтаксических ошибок в PHP?
4 ответа
Проверьте конфигурацию веб-сервера. такие места: disable_functions="". после того, как var_dump($output) начинает возвращать проверку массива на наличие ошибок в массиве, чтобы устранить дальнейшие ошибки, такие как правильный путь к php.
используйте это, чтобы исключить некоторые другие возможности:
$output="just before exec";
var_dump($output);
exec('php -l /path/to/file.php', $output);
var_dump($output);
PS может быть использован как
echo exec('php -l /path/to/file.php');
Upd: обновленный вопрос показывает exec работает. Это может быть ваша *nix как платформа скрывает вывод ошибок. способ перенаправить его, чтобы добавить к команде 2>&1, он перенаправит вывод ошибок в стандартный вывод
$to_run = '/path/to/bin/php -l /path/to/file 2>&1';
$output ="" ; //init
var_dump(exec($to_run, $output));
если у вас есть root-доступ на платформе, вы можете даже использовать такие инструменты, как strace, для отладки некоторых сложных случаев.
'/path/to/bin/strace -o/path/to/strace.log php -l /path/to/file.php'
UPD: var_dump (exec ('php -l'. FILE. '2>&1', $ output)); // перенаправление ошибок для платформы unix
Чтобы проверить много файлов php, вы можете сохранить этот код как пакетный файл и выполнить его:
echo php files error check report >output.txt
for /r %%i in (*.php) do ( echo. & php -l %%i ) >>output.txt
start "" "output.txt"
Сохраните его как "check.bat" (например) в каталоге php-файлов и выполните его.
Вот сценарий Unix bash, который вы можете использовать для проверки синтаксиса всех файлов .php в папке и подпапке:
find . -iname '*.php' -exec php -l '{}' \; | grep '^No syntax errors' -v | less
Источник: https://gist.github.com/Fake51/865603
Вы можете сделать это, запустив PHP с помощью -l
параметр в командной строке:
test.php
:
<?php
phpinfo()
результат:
$ php -l test.php
PHP Parse error: syntax error, unexpected end of file in test.php on line 2
Parse error: syntax error, unexpected end of file in test.php on line 2
Errors parsing test.php
test.php
<?php
phpinfo();
результат:
$ php -l test.php
No syntax errors detected in test.php