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

2022-08-30 06:31:06

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

这怎么可能?


答案 1

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

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

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

您可以使用 的 -r 开关php

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

上面的PHP命令应该输出返回,如您所见:no0

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

如果它不能像在我的盒子上那样在你的盒子上工作(在UbuntuArch Linux测试),那么你的PHP设置可能是模糊的或坏的。如果运行以下命令:

php -i | grep 'API'

您应该看到:

Server API => Command Line Interface

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

如果您确实看到您的命令使用CLI(命令行界面)SAPI(服务器API),然后运行以找出哪个疯狂的开关 - 因为这已经一年没有改变 - 允许在您的版本/设置中运行代码。phpphp -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 文件,例如 vs. 与。 在Gentoo Linux盒子上。找出哪个 ini 文件与 一起使用。/etc/php/cli/php.ini/etc/php/cgi/php.ini/etc/php/apache/php.iniphp -i | grep ini


答案 2

从命令行使用 PHP

在以下情况下使用 CLI 版本时,请代替在 Windows 上使用:"'-r

正确

php -r "echo 1;"

不對

php -r 'echo 1;'
  PHP Parse error:  syntax error, unexpected ''echo' (T_ENCAPSED_AND_WHITESPACE), expecting end of file in Command line code on line 1

不要忘记用分号关闭该行(否则,结果是“PHP Parse 错误:语法错误,文件意外结束,在第 1 行的命令行代码中出现 ';' 或 ''”)。


推荐