如何从命令行执行 PHP 代码?

我想使用命令行直接执行单个 PHP 语句(如 if(function_exists("my_func")) echo 'function exists';) ,而不必使用单独的 PHP 文件。

这怎么可能?

269825 次浏览

如果你打算在命令行中使用 PHP,我建议你安装 Phpsh,一个不错的 PHP shell 这样更有趣。

无论如何,php命令提供 从命令行执行代码的两个开关:

-r <code>        Run PHP <code> without using script tags <?..?>
-R <code>        Run PHP <code> for every input line

你可以这样使用 phpR 开关:

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 为 PHP 制作了一个非常棒的交互式 shell 来获取选项卡完成、历史等等,那么就安装 这样使用:

>>> php -a
Interactive shell


php > echo function_exists("foo") ? "yes" : "no";
no
php >

如果它不像我的 box是的(测试UbuntuArch Linux)那样在你的盒子上起作用,那么 可能您的 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 或 ApacheSAPI 中。可能有几个 PHP SAPI 使用不同的 PHP.ini 文件,例如,/etc/php/cli/php.ini/etc/php/cgi/php.ini/etc/php/apache/php.iniGentoo Linux盒子上。找出与 php -i | grep ini一起使用的 ini 文件。

在命令行上:

php -i | grep sourceguardian

如果有的话,你会收到一些短信,如果没有的话,你什么也收不到。

你可使用:

 echo '<?php if(function_exists("my_func")) echo "function exists"; ' | php

短标签“ [歌声]”也很有用:

 echo '<?= function_exists("foo") ? "yes" : "no";' | php
echo '<?= 8+7+9 ;' | php

结束标记“ ? >”是可选的,但是不要忘记最后一个“ ;”!

从命令行使用 PHP

在 Windows 上使用 "而不是 '时,将 CLI 版本与 -r一起使用:

没错

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

不要忘记用分号关闭这一行(否则,结果是 “ PHP 解析错误: 语法错误,文件意外结束,在第1行的命令行代码中出现’;’或’,’”)。

如果您使用的是 Laravel,那么您可以使用 php artisan tinker来获得一个令人惊叹的交互式 shell 来与 Laravel 应用程序进行交互。然而,Tinker 使用的是“ Psysh”,即 很受欢迎 PHP REPL 和 你可以使用它,即使你没有使用 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"

我非常喜欢 神经病的一个很棒的特性是,它提供了一种从命令行直接查找 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/

现在举个例子:

Enter image description here

通过 Windows 命令运行 PHP shell:

php -a

它将在 Windows 中打开下面的 PHP shell,我在其中测试了一个简单的 square_val()函数:

function square_val($num, $pow){
return $num**$pow;
}

测试了上述代码。

要测试上述代码是否有效,请先使用 echo square_val(4, 2);,然后使用 echo square_val(4, 0.5);

php-shell-command-line