如何从命令行执行PHP代码?


Answers

如果你打算在命令行中执行PHP,我建议你安装phpsh,一个体面的PHP shell 这非常有趣。

无论如何,php命令提供了两个开关来从命令行执行代码

-r <code>        Run PHP <code> without using script tags <?..?>
-R <code>        Run PHP <code> for every input line

你可以使用php的-r开关

php -r 'echo function_exists("foo") ? "yes" : "no";'

上面的PHP命令应该输出 no返回 0如你所见:

>>> php -r 'echo function_exists("foo") ? "yes" : "no";'
no
>>> echo $? # print the return value of the previous command
0

另一个有趣的开关是php -a

-a               Run as interactive shell

phpsh相比有些蹩脚 ,但如果您不想安装由Facebook制作的令人敬畏的交互式shell以获得标签 填充历史记录等 ,请使用-a,例如

>>> php -a
Interactive shell

php > echo function_exists("foo") ? "yes" : "no";
no
php > 

如果它在你的盒子上不起作用 ,就像我的盒子* es *(在Ubuntu和Arch上测试 ),那么你的PHP设置可能是模糊的或者是破碎的 。 如果你运行这个命令:

php -i | grep 'API'

应该看到:

Server API => Command Line Interface

如果你不这样做 ,这意味着也许另一个命令将提供CLI SAPI 。 试试php-cli,也许它是你的操作系统中的一个包或一个命令。

如果你确实看到你的php命令使用CLI(命令行界面)SAPI(服务器API),那么运行php -h | grep code php -h | grep code 找出哪个疯狂的开关 - 因为这一年没有变化 -允许在你的版本/设置中运行代码。

另外几个例子,只是为了确保它适用于我的盒子:

>>> php -r 'echo function_exists("sg_load") ? "yes" : "no";' 
no
>>> php -r 'echo function_exists("print_r") ? "yes" : "no";' 
yes

另外请注意,可能在CLI中加载了扩展,而不是在CGI或Apache SAPI中加载。 很可能有几个PHP SAPI使用不同的php.ini文件 ,例如/etc/php/cli/php.ini vs /etc/php/cgi/php.ini/etc/php/apache/php.ini在Gentoo上框。 找出哪个ini文件与php -i | grep ini php -i | grep ini

Question

我想执行一个单一的PHP语句,如if(function_exists("my_func")) echo 'function exists'; 直接使用命令行而不必使用单独的php文件。

这怎么可能 ?




在命令行上:

php -i | grep sourceguardian

如果它在那里,那么你会得到一些文字。 如果不是,你不会得到一件事。