3

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

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

3 回答 3

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);

ps 可以像这样使用

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'

UPD: var_dump(exec('php -l' . FILE .' 2>&1', $output)); // Unix 平台的错误重定向

于 2014-02-06T11:33:52.933 回答
1

要检查许多 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 文件目录中并执行它。

于 2017-12-14T08:07:48.707 回答
0

-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

test.php

<?php
phpinfo();

结果:

$ php -l test.php
No syntax errors detected in test.php
于 2016-10-06T08:33:01.673 回答