检查PHP文件是否存在语法错误

时间:2014-02-06 01:55:46

标签: php syntax syntax-checking

我正在尝试在我的应用程序中构建一个审核功能,以检查各种代码质量问题。

我想做的一件事是检查某些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语法错误?

3 个答案:

答案 0 :(得分:2)

检查网络服务器配置。 像这样的地方:disable_functions =“”。 在var_dump($ output)开始返回数组之后检查数组中的错误,以消除更多错误,例如正确的php路径。

使用它来消除其他一些可能性:

$output="just before exec";
var_dump($output);
exec('php -l /path/to/file.php', $output);
var_dump($output);

P.S。可以像

一样使用
echo exec('php -l /path/to/file.php');

更新:更新的问题显示exec有效。 它可能是你的* nix like平台隐藏错误输出。 一种重定向它以添加到命令2&gt;&amp; 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&gt;&amp; 1',$ output)); // unix平台的错误重定向

答案 1 :(得分:0)

您可以使用命令行上带有-l参数的lint运行PHP来执行此操作:

<强> 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

答案 2 :(得分:0)

要检查许多php文件,您可以将此代码保存为批处理文件并执行它:

echo php files error check report >output.txt
for /r %%i in (*.php) do ( echo. & php -l %%i  )  >>output.txt
start "" "output.txt"

另存为&#34; check.bat&#34; (例如)在php文件目录中执行它。