如何从命令行执行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>

如果(function_exists(“my_func”))echo“function exists”,我想执行一条PHP语句,如
直接使用命令行,无需使用单独的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标记。