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

时间:2012-03-01 16:31:55

标签: php linux function shell command-line

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

怎么可能?

6 个答案:

答案 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/
现在

例如: enter image description here

答案 5 :(得分:0)

要通过 Windows 命令运行 PHP Shell

  1. 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