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.
在使用 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)
不要忘记用分号来结束该行。