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

7rtdyuoh  于 2023-02-11  发布在  PHP
关注(0)|答案(4)|浏览(219)

我尝试在应用程序中构建一个审计特性,以检查各种代码质量问题。
我想做的一件事是检查某些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文件中的语法错误?

qf9go6mv

qf9go6mv1#

检查web-服务器配置. places like this: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类平台隐藏错误输出。一种方法来重定向它添加到命令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'

变量转储(exec('php-l ' .文件.' 2〉&1',$输出));//unix平台的错误重定向

j0pj023g

j0pj023g2#

要检查多个php文件,可以将以下代码保存为批处理文件并执行:

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

在php文件目录中将其保存为“check.bat”(例如)并执行它。

sgtfey8w

sgtfey8w3#

您可以在命令行中使用-l参数通过运行PHP的lint来完成此操作:

    • 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
    • 一米二米一x**
<?php
phpinfo();

结果:

$ php -l test.php
No syntax errors detected in test.php
ua4mk5z4

ua4mk5z44#

下面是一个Unix bash脚本,你可以用它来对文件夹和子文件夹中的所有. php文件进行语法检查:

find . -iname '*.php' -exec php -l '{}' \; | grep '^No syntax errors' -v  | less

来源:https://gist.github.com/Fake51/865603

相关问题