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

nle07wnf  于 12个月前  发布在  Shell
关注(0)|答案(6)|浏览(159)

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

vsdwdz23

vsdwdz231#

**如果你打算在命令行中使用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

如果它不工作在您的机器上像我的机器es测试UbuntuArch Linux),那么可能你的PHP设置是模糊或损坏。如果运行此命令:

php -i | grep 'API'

你应该看到:

Server API => Command Line Interface

如果您没有,这意味着可能另一个命令将提供CLI SAPI。试试php-php;可能是你操作系统中的一个包或命令。
如果您确实看到您的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 SAP使用不同的php.ini文件,例如/etc/php/cli/php.ini/etc/php/cgi/php.ini/etc/php/apache/php.iniGentoo Linux盒子上。找出php -i | grep ini使用的ini文件。

9jyewag0

9jyewag02#

Using PHP from the command line
在Windows上使用-r的CLI版本时,请使用"而不是'

正确

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 Parse error:语法错误,意外的文件结尾,应为“;'或','在命令行代码第1行”)。

abithluo

abithluo3#

您可以用途:

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

短标签“<?

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

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

v1l68za4

v1l68za44#

通过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);

70gysomp

70gysomp5#

在命令行上:

php -i | grep sourceguardian

如果它在那里,那么你会得到一些文本。如果没有,你什么也得不到。

xmakbtuz

xmakbtuz6#

如果你正在使用Laravel,你可以使用php artisan tinker来获得一个惊人的交互式shell来与你的Laravel应用交互。然而,Tinker在引擎盖下使用“Pysh”,这是a popular 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"

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

例如:

相关问题