Проверьте файл 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
Другие вопросы по тегам