小编典典

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

all

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

这怎么可能?


阅读 26

收藏
2022-08-05

共1个答案

小编典典

如果你打算在命令行中做 PHP,我建议你安装 phpsh,一个不错的 PHP
shell
这更有趣。

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

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

您可以像这样使用php‘s -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 为 PHP 制作的出色交互式 shell
以获取选项卡完成、历史记录等
,请 使用 -a

>>> php -a
Interactive shell

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

如果它不能 像在我的盒子 es
上那样在你的盒子上工作(在UbuntuArch
Linux上
测试 ),那么 你的 PHP
设置可能是模糊的或损坏

的。如果您运行此命令:


php -i | grep 'API'

应该 看到:

Server API => Command Line Interface

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

如果您确实 看到您的php命令使用 CLI(命令行界面)SAPI(服务器 API),然后运行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与在Gentoo
Linux
/etc/php/cgi/php.ini机器上的对比。找出与./etc/php/apache/php.iniphp -i | grep ini

2022-08-05