您可以php -l
通过管道检查来自 STDIN 的代码。示例:
$ echo "<?php echo 'hello world'" | php -l
Parse error: syntax error, unexpected end of file, expecting ',' or ';' in - on line 2
Errors parsing -
;
这里在单引号字符串之后缺少结束分号。如果你添加它,错误就会消失,PHP 会告诉你:
$ echo "<?php echo 'hello world';" | php -l
No syntax errors detected in -
-
中 的破折号Errors parsing -
或No syntax errors detected in -
代表 STDIN。它通常用于此目的。
另一种方法是编写您自己想要 lint 的代码(或复制并粘贴它)。这通过使用 lint 开关来工作--
,输入代码并通过在自己的一行上输入Ctrl + D(Linux) / Ctrl + Z(Win) 来完成它:
$ php -l --
<?php echo "1"
^Z
Parse error: syntax error, unexpected end of file, expecting ',' or ';' in - on line 2
Errors parsing -
顺便说一句,-r
通常用于提供执行代码的开关在这种情况下不起作用并给出错误:
$ php -l -r "echo 1"
Either execute direct code, process stdin or use a file.
很可能是因为它用于运行代码,仅此而已,没有 linting。它也没有打开 PHP 标记。
从所有这些选项中,如果您想通过管道输入第一个选项可能最有意义(如果proc_open
您需要更多控制,您也可以使用它进行操作)。这是一个使用 PHP 的简单示例exec
:
<?php
/**
* PHP Syntax Checking with lint and how to do this on a string, NOT a FILE
*
* @link http://stackoverflow.com/q/12152765/367456
* @author hakre
*/
$code = "<?php echo 'hello world'";
$result = exec(sprintf('echo %s | php -l', escapeshellarg($code)), $output, $exit);
printf("Parsing the code resulted in; %s\n", $result);
echo "The whole output is:\n";
print_r($output);
输出如下:
Parsing the code resulted in; Errors parsing -
The whole output is:
Array
(
[0] =>
[1] => Parse error: syntax error, unexpected '"', expecting ',' or ';' in - on line 1
[2] => Errors parsing -
)