Sol*_*son 8 php command-line syntax-error
首先,我对如何在命令行中运行PHP感到困惑.我一直在网上阅读几篇文章,他们都说你需要一个CLI(命令行界面).
基本上,我有PHP文件,我想调用这样的东西:
php -l somefile.php
Run Code Online (Sandbox Code Playgroud)
但我想检查字符串,而不是文件!如何才能做到这一点?可以使用STDIN,STDOUT或STDERR来帮忙吗?
如果是这样,怎么样?有人可以提供一个例子吗?
另外,我在哪里放置上面的代码?我没有访问命令行(我不认为),或者我只是将它放在将运行的PHP文件中?在这种情况下,它会在命令行中执行此代码吗?
我对这个PHP命令行的工作方式完全不了解......有人可以帮忙解释一下吗?
hak*_*kre 14
您可以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 -
Run Code Online (Sandbox Code Playgroud)
在;单引号字符串后面缺少结尾分号.如果你添加它,错误消失,PHP告诉你:
$ echo "<?php echo 'hello world';" | php -l
No syntax errors detected in -
Run Code Online (Sandbox Code Playgroud)
破折号-在 Errors parsing -或No syntax errors detected in -代表STDIN.它通常用于此.
另一种方法是编写您想要自己的代码(或复制并粘贴它).这通过使用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 -
Run Code Online (Sandbox Code Playgroud)
BTW,-r通常用于提供执行代码的开关在这种情况下不起作用,并且它给出了错误:
$ php -l -r "echo 1"
Either execute direct code, process stdin or use a file.
Run Code Online (Sandbox Code Playgroud)
最有可能的原因是它用于运行代码,而不是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);
Run Code Online (Sandbox Code Playgroud)
输出如下:
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 -
)
Run Code Online (Sandbox Code Playgroud)
如果您想要 lint 代码(不在文件内),唯一的选择是编写包装器。
假设您的 $HOME/bin 在 /usr/bin 之前,您可以将包装器安装在 $HOME/bin/php 中,该包装器具有不同的命令行 linting 选项。包装器将创建一个临时文件,将代码放入其中,运行/usr/bin/php -l file然后删除临时文件。
HTH。
| 归档时间: |
|
| 查看次数: |
12728 次 |
| 最近记录: |