如何从命令行执行PHP代码?
我想执行一个单一的PHP语句,如if(function_exists("my_func")) echo 'function exists';
直接使用命令行而不必使用单独的php文件。
这怎么可能 ?
如果你打算在命令行中执行PHP,我build议你安装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来获得标签 填充 , 历史logging等等 ,那么使用-a就是这样 :
>>> php -a Interactive shell php > echo function_exists("foo") ? "yes" : "no"; no php >
如果它不能在你的盒子上工作 ,就像在我的盒子* es *上(在Ubuntu和Arch上testing ),那么你的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
vs /etc/php/apache/php.ini
在Gentoo上框。 找出哪个ini文件用于php -i | grep ini
php -i | grep ini
。
在命令行上:
php -i | grep sourceguardian
如果它在那里,那么你会得到一些文字。 如果没有,你不会得到一个东西。