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

Ste*_*eve 155 php linux shell command-line function

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

这怎么可能 ?

jpi*_*pic 243

如果您要在命令行中执行PHP,我建议您安装phpsh,一个体面的PHP shell.这更有趣.

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

-r <code>        Run PHP <code> without using script tags <?..?>
-R <code>        Run PHP <code> for every input line
Run Code Online (Sandbox Code Playgroud)

您可以使用php的-r开关:

php -r 'echo function_exists("foo") ? "yes" : "no";'
Run Code Online (Sandbox Code Playgroud)

上面的PHP命令应输出 no返回, 0如下所示:

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

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

-a               Run as interactive shell
Run Code Online (Sandbox Code Playgroud)

phpsh相比,有点蹩脚,但是如果你不想为facebook制作的php安装令人敬畏的交互式shell来获取标签完成,历史记录等,那么使用-a如下:

>>> php -a
Interactive shell

php > echo function_exists("foo") ? "yes" : "no";
no
php > 
Run Code Online (Sandbox Code Playgroud)

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

php -i | grep 'API'
Run Code Online (Sandbox Code Playgroud)

应该看到:

Server API => Command Line Interface
Run Code Online (Sandbox Code Playgroud)

如果不这样做,这意味着可能另一个命令将提供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
Run Code Online (Sandbox Code Playgroud)

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

  • 需要注意的是phpsh由其作者(脸谱),有人在谷歌网上论坛页面上不再保留[在2012年说,"phpsh是不是真的支持或有用的任何更多"(https://groups.google.com/forum /#!topicsearchin/phpsh /不是$ 20useful/phpsh/uWkee9cdcmY).你可能会考虑在[鲍里斯REPL(https://github.com/borisrepl/boris)一种改进的PHP控制台. (6认同)
  • 它不会返回任何东西 (3认同)

use*_*505 5

从命令行使用 PHP

在使用 CLI 版本时使用"而不是'在 Windows 上-r

php -r "echo 1;"
Run Code Online (Sandbox Code Playgroud)

- 正确的

php -r 'echo 1;'
Run Code Online (Sandbox Code Playgroud)

-- 不正确

  PHP Parse error:  syntax error, unexpected ''echo' (T_ENCAPSED_AND_WHITESPACE), expecting end of file in Command line code on line 1
Run Code Online (Sandbox Code Playgroud)

不要忘记用分号来结束该行。