我想直接用命令行执行像if(function_exists("my_func")) echo 'function exists';
这样的单个php语句,而不必使用单独的php文件。
怎么可能?
答案 0 :(得分:224)
如果您要在命令行中使用PHP,我建议您安装phpsh, a decent 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 相比,有点蹩脚,但如果您不想安装the awesome interactive shell for php made by facebook to get tab completion, history, and so on,那么使用-a :
>>> php -a
Interactive shell
php > echo function_exists("foo") ? "yes" : "no";
no
php >
如果它不起作用就像在我的方框上一样* es *(在Ubuntu和Arch上测试),那么< strong>可能你的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文件,例如Gentoo框上的/etc/php/cli/php.ini
vs /etc/php/cgi/php.ini
vs /etc/php/apache/php.ini
。找出与php -i | grep ini
一起使用的ini文件。
答案 1 :(得分:3)
Using PHP from the command line
在带有-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
答案 2 :(得分:2)
在命令行上:
php -i | grep sourceguardian
如果它在那里,那么你会得到一些文字。如果没有,你就不会得到任何东西。
答案 3 :(得分:0)
您可以使用:
echo '<?php if(function_exists("my_func")) echo "function exists"; ' | php
短标签“ <?= ”也可能有帮助:
echo '<?= function_exists("foo") ? "yes" : "no";' | php
echo '<?= 8+7+9 ;' | php
结束标记“?>”是可选的,但不要忘了最后的“;” !
答案 4 :(得分:0)
如果您使用的是Laravel,则可以使用php artisan tinker
获得一个令人惊叹的交互式Shell,以与您的Laravel应用进行交互。但是,Tinker可以在popular PHP REPL的背景下使用“ Psysh”,并且即使您没有使用Laravel (裸PHP),也可以使用它:
// Bare PHP:
>>> preg_match("/hell/", "hello");
=> 1
// Laravel Stuff:
>>> Str::slug("How to get the job done?!!?!", "_");
=> "how_to_get_the_job_done"
我非常喜欢Psysh的一个很棒的功能是,它提供了一种从命令行直接查找PHP文档的快速方法。要使其正常工作,您只需执行以下简单步骤:
apt install php-sqlite3
,然后获取所需的PHP docs数据库并将其移至正确的位置:
wget http://psysh.org/manual/en/php_manual.sqlite
mkdir -p /usr/local/share/psysh/ && mv php_manual.sqlite /usr/local/share/psysh/
现在
答案 5 :(得分:0)