如何从命令行执行PHP代码?
如果(function_exists(“my_func”))echo“function exists”,我想执行一条PHP语句,如如何从命令行执行PHP代码?,php,linux,function,shell,command-line,Php,Linux,Function,Shell,Command Line,如果(function_exists(“my_func”))echo“function exists”,我想执行一条PHP语句,如直接使用命令行,无需使用单独的PHP文件 怎么可能呢?如果您打算在命令行中使用PHP,我建议您安装。这会更有趣 无论如何,php命令提供了两个开关来执行来自命令行的代码: -r <code> Run PHP <code> without using script tags <?..?> -R <code>
代码>直接使用命令行,无需使用单独的PHP文件
怎么可能呢?如果您打算在命令行中使用PHP,我建议您安装。这会更有趣
无论如何,php
命令提供了两个开关来执行来自命令行的代码:
-r <code> Run PHP <code> without using script tags <?..?>
-R <code> Run PHP <code> for every input line
-a Run as interactive shell
>>> php -a
Interactive shell
php > echo function_exists("foo") ? "yes" : "no";
no
php >
您可以使用php
的-r开关,如下所示:
php -r 'echo function_exists("foo") ? "yes" : "no";'
上面的PHP命令应该输出否
,返回0
,如您所见:
>>> php -r 'echo function_exists("foo") ? "yes" : "no";'
no
>>> echo $? # print the return value of the previous command
0
另一个有趣的切换是php-a:
-r <code> Run PHP <code> without using script tags <?..?>
-R <code> Run PHP <code> for every input line
-a Run as interactive shell
>>> php -a
Interactive shell
php > echo function_exists("foo") ? "yes" : "no";
no
php >
与相比,它有点蹩脚,但是如果您不想安装,那么就使用-a这样的:
-r <code> Run PHP <code> without using script tags <?..?>
-R <code> Run PHP <code> for every input line
-a Run as interactive shell
>>> php -a
Interactive shell
php > echo function_exists("foo") ? "yes" : "no";
no
php >
如果它在你的盒子上不起作用就像在我的盒子上一样es(在和上测试过),那么可能你的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.ini
vs./etc/PHP/cgi/PHP.ini
vs./etc/PHP/apache/PHP.ini
。在命令行上查找与php-i | grep ini一起使用的ini文件:
php -i | grep sourceguardian
如果它在那里,你会收到一些短信。如果没有,你将一无所获 您可以使用:
echo '<?php if(function_exists("my_func")) echo "function exists"; ' | php
echo'
将CLI版本与-r
一起使用时,请在Windows上使用“
而不是”
:
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
不要忘记用分号来结束这一行。如果你使用的是Laravel,你可以使用php artisan tinker
来获得一个惊人的交互式shell来与你的Laravel应用程序交互。然而,tinker在引擎盖下使用“Psysh”,这是一个php REPL,并且你可以使用它,即使你没有使用Laravel(裸php):
我非常喜欢的一个伟大特性是,它提供了一种从命令行直接查找PHP文档的快速方法
apt install php-sqlite3
然后获取所需的PHP文档数据库并将其移动到适当的位置:
wget http://psysh.org/manual/en/php_manual.sqlite
mkdir -p /usr/local/share/psysh/ && mv php_manual.sqlite /usr/local/share/psysh/
例如,现在:
要通过Windows命令运行PHP Shell
php-a
它将在我测试的Windows中打开下面的PHP shell,一个简单的square\u val()
函数
function square_val($num, $pow){
return $num**$pow;
}
对上述代码进行了测试
要测试上述代码,请执行echo square_val(4,2);
然后执行echo square_val(4,0.5);
在不使用任何包含用户定义函数的其他文件的情况下执行函数_exists()不会有多大好处,除非测试PHP版本,您可以通过其他方式找到。您想测试什么函数?我正在寻找测试此函数:sg_load()听起来你真正想知道的是sourceguardian php扩展是否启用了?然后phpinfo()应该会告诉你。也许你的php设置被破坏了。我更新了我的答案,包括解决问题的提示。添加了一个关于php-a的注释,这可能对你有用。请注意,phpsh不再由其作者(Facebook)维护和Google Groups页面上的某个人。你可能会寻找改进的php控制台。最简单的方法是php-a
我在下面添加了一张图片并写了一个答案。我是盲人,或者这个答案与问题无关。这个答案应该如何回答问题?”如何直接从命令行运行PHP代码,而不将PHP代码保存到.PHP
文件中?“?@trejder有一段时间我不知道我是否回答了错误的问题,但随后我查看了编辑历史和评论。这回答了OP似乎真正需要的问题:找出是否加载了特定的PHP扩展。这个问题后来被重新措辞,所以现在不太合适。这似乎比7岁的孩子接受的答案更麻烦。使用php-r
您不必担心打开php标记。