Command line 在命令行上执行一个PHP代码字符串

Command line 在命令行上执行一个PHP代码字符串,command-line,php,Command Line,Php,我希望能够在命令行上运行一行PHP代码,类似于以下选项的工作方式: :~> perl -e "print 'hi';" :~> python -c "print 'hi'" :~> ruby -e "puts 'hi'" 我希望能够做到: :~> php "echo 'hi';" 我已经读到有一个-r选项可以满足我对php的需求,但是当我尝试使用它时,它似乎不可用。我尝试过使用PHP5.2.13和PHP4.4.9,但都没有可用的-r选项 我写了这个脚本(我称之为run

我希望能够在命令行上运行一行PHP代码,类似于以下选项的工作方式:

:~> perl -e "print 'hi';"
:~> python -c "print 'hi'"
:~> ruby -e "puts 'hi'"
我希望能够做到:

:~> php "echo 'hi';"
我已经读到有一个-r选项可以满足我对php的需求,但是当我尝试使用它时,它似乎不可用。我尝试过使用PHP5.2.13和PHP4.4.9,但都没有可用的-r选项

我写了这个脚本(我称之为run_php.php)——它可以工作,但我不是它的超级粉丝,因为我觉得应该有一种更“正确”的方法来完成它

#!/usr/bin/php5 -q
<?php echo eval($argv[1]); ?> 

很抱歉给您带来困惑。

如果您还没有看到,请在上查看此页。有些帖子是关于基于操作系统和双引号或单引号的问题

我还将检查PHP信息

php-i

查看PHP是否为(--disable cli)。

EDIT2:Yep,它在中

编辑:如果您无法升级,并且在PHP5.2中没有这样的选项(我手头没有进行测试),您可以这样做:

glopes@nebm:~$ echo "<?php echo \"hi\\n\";" | php hi
php -r "passthru(file_get_contents('php://stdin'));"
只需确保您使用的是PHP的命令行版本
php--version
应该提供如下内容(注意“cli”):

D:\>php——版本 PHP5.3.0(cli)(编译时间:2010年5月20日19:05:12)(调试) 版权所有(c)1997-2009 PHP集团 Zend Engine v2.3.0版权所有(c)1998-2009 Zend Technologies
最后不需要额外的分号

您可以提到
php-r“echo'hi';”
而不是
php-r“echo'hi';”

另一个示例(在命令行获取当前时间戳):


在新版本的PHP中,您只需键入“PHP-a”,然后进入一种交互模式,在该模式下您可以尝试使用PHP。

最简单的方法是使用-r标志。但是,我发现它不允许多行输入。要解决此问题,您可以执行以下操作:

glopes@nebm:~$ echo "<?php echo \"hi\\n\";" | php hi
php -r "passthru(file_get_contents('php://stdin'));"
它允许您从标准输入进行管道传输,如下所示:

echo -n "echo 'test';" | php -r "passthru(file_get_contents('php://stdin'));"
但是,为了回答最初的问题,如果没有-r标志,也可以使用-f标志-只需将stdin作为要打开的文件传递:
php-f/dev/stdin


如果您这样做,请注意a)您需要在输入的开始处包含一个空格,b)您必须使用
在哪个操作系统上运行此操作?Matthew J Morrison,这是您的服务器还是托管服务器?@Inkspeak-这是托管服务器(因为我很便宜)@Matthew J Morrison,我怀疑,正如其他答案和评论所表明的,您的PHP是在无CLI支持的情况下编译的。您的主机提供商可能出于安全考虑而这样做。@Inkspeak似乎确实如此。谢谢您能否详细说明(cli)的真正含义?我很确定这是我的问题。My——两个版本的版本输出都是(cgi)@Matthew J Morrison使用
--enable cli
选项编译PHP时会生成SAPI。这是否意味着如果我的PHP安装没有使用--enable cli选项,则没有编译后设置来启用cli?@Matthew J Morrison它是一个单独的二进制文件。可能它在您的系统中以不同的名称/位置出现,可能不是。链接现在已断开。 D:\>php --version PHP 5.3.0 (cli) (built: May 20 2010 19:05:12) (DEBUG) Copyright (c) 1997-2009 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies
php -r 'print time()."\n";'
php -r "passthru(file_get_contents('php://stdin'));"
echo -n "echo 'test';" | php -r "passthru(file_get_contents('php://stdin'));"
echo -ne " <?php\necho 'test';" | php -f /dev/stdin