gpt4 book ai didi

使用 lint 进行 PHP 语法检查以及如何在字符串而不是文件上执行此操作

转载 作者:可可西里 更新时间:2023-11-01 12:27:11 25 4
gpt4 key购买 nike

首先,我对如何在命令行中运行 PHP 感到困惑。我在网上阅读了几篇文章,他们都说你需要一个 CLI(命令行界面)。

基本上,我有 PHP 文件,我想这样调用:

php -l somefile.php

但我想检查一个字符串,而不是一个文件!如何才能做到这一点?使用 STDINSTDOUTSTDERR 可以帮助解决这个问题吗?

如果可以,怎么做?有人可以在这里举个例子吗?

另外,我应该把上面的代码放在哪里?我无权访问命令行(我不认为),或者我只是将它放在将运行的 PHP 文件本身中?在这种情况下,它会在命令行中执行这段代码吗?

我完全不知道这个 PHP 命令行是如何工作的...有人能帮我解释一下吗?

最佳答案

您可以使用 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 完成它(赢)在它自己的一行:

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

关于使用 lint 进行 PHP 语法检查以及如何在字符串而不是文件上执行此操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12152765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com