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


163

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

这怎么可能 ?


1
在不使用包含用户定义函数的任何其他文件的情况下执行function_exists()不会有什么好处,除了测试PHP版本(您可以通过其他方式找到它)之外。您要测试什么功能?
马特·吉布森

我正在寻找测试此功能的方法:sg_load()
史蒂夫·

2
听起来您真正想要的是找出是否启用了sourceguardian php扩展?
马特·吉布森

2
然后phpinfo()应该告诉您。
jpic 2012年

Answers:


256

如果您要在命令行中使用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相比,有点la脚,但是如果您不想安装facebook制作的php真棒交互式shell来获取制表符的完成情况,历史记录等信息,请使用-a这样

>>> php -a
Interactive shell

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

如果它不能像我的box * 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 -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.inivs /etc/php/cgi/php.ini与vs /etc/php/apache/php.ini在Gentoo盒子上。找出与哪个ini文件一起使用php -i | grep ini


也许您的PHP设置已损坏。我更新了我的答案,其中包括一些提示,以便弄清楚。
jpic 2012年

添加了有关php -a的注释,这可能对您有用。
jpic 2012年

6
请注意,phpsh不再由其作者(Facebook)维护,并且在Google网上论坛页面上有人在2012年说“不再真正支持phpsh或不再有用”。您可以研究Boris REPL,以获得改进的php控制台。
Ben Creasy 2015年

3

在命令行上:

php -i | grep sourceguardian

如果在那里,那么您会得到一些文本。如果没有,您将一事无成。


4
我是盲人,还是这个答案与问题无关。这个答案应该如何回答“ 如何直接从命令行运行PHP代码而不将PHP代码保存到.php文件中? ”的问题?
trejder 2014年

15
@trejder有一会儿,我想知道我是否回答了错误的问题,但随后我查看了编辑历史记录和评论。这回答了OP似乎真正需要的内容:找出是否已加载特定的PHP扩展。此问题已被重新表述,所以现在不太适合。
Matt Gibson 2014年

3

您可以使用 :

 echo '<?php if(function_exists("my_func")) echo "function exists"; ' | php

短标签“ <?= ”也可能有帮助:

 echo '<?= function_exists("foo") ? "yes" : "no";' | php
 echo '<?= 8+7+9 ;' | php

结束标记“?>”是可选的,但不要忘记最后一个“;” !


2
这似乎比7岁接受的答案更麻烦。使用php -r您无需担心打开PHP标记。
miken32 '19

1

从命令行使用PHP

在带有-r的cli版本中,在Windows上使用而不是

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.