我正在尝试在我的应用程序中构建一个审核功能,以检查各种代码质量问题。
我想做的一件事是检查某些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语法错误?
答案 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文件目录中执行它。