在命令行上执行一串PHP代码

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

:~> perl -e "print 'hi';" :~> python -c "print 'hi'" :~> ruby -e "puts 'hi'" 

我希望能够做到:

 :~> php "echo 'hi';" 

我读过,有一个-r选项,可以做我所需要的PHP,但它似乎并不可用,当我尝试使用它。 我试过使用PHP 5.2.13和PHP 4.4.9,都没有-r选项可用。

我写了这个脚本(我称之为run_php.php) – 这是有效的,但我并不是一个很大的粉丝,只是因为我觉得应该有一个更正确的方法来做到这一点。

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

我的问题是:是否有一个-r选项? 如果是这样,为什么当我运行 – 帮助? 如果没有-r选项,最好的办法是什么(如果可能的话,不用写中介脚本)?

谢谢!

===编辑===

因为我认为上面没有这么清楚,所以-r选项对我不可用。 这里是我运行的两个PHP版本的php -h输出。

PHP 4.4.9

 Usage: php [-q] [-h] [-s] [-v] [-i] [-f <file>] php <file> [args...] -a Run interactively -C Do not chdir to the script's directory -c <path>|<file> Look for php.ini file in this directory -n No php.ini file will be used -d foo[=bar] Define INI entry foo with value 'bar' -e Generate extended information for debugger/profiler -f <file> Parse <file>. Implies `-q' -h This help -i PHP information -l Syntax check only (lint) -m Show compiled in modules -q Quiet-mode. Suppress HTTP Header output. -s Display colour syntax highlighted source. -v Version number -w Display source with stripped comments and whitespace. -z <file> Load Zend extension <file>. 

PHP 5.2.13

 Usage: php [-q] [-h] [-s] [-v] [-i] [-f <file>] php <file> [args...] -a Run interactively -C Do not chdir to the script's directory -c <path>|<file> Look for php.ini file in this directory -n No php.ini file will be used -d foo[=bar] Define INI entry foo with value 'bar' -e Generate extended information for debugger/profiler -f <file> Parse <file>. Implies `-q' -h This help -i PHP information -l Syntax check only (lint) -m Show compiled in modules -q Quiet-mode. Suppress HTTP Header output. -s Display colour syntax highlighted source. -v Version number -w Display source with stripped comments and whitespace. -z <file> Load Zend extension <file>. 

没有-r选项。 当我尝试使用-r选项时,我得到:

 Error in argument 1, char 2: option not found r 

对困惑感到抱歉。

编辑2:是的,它在PHP 5.2的cli SAPI中 。

编辑:如果你不能升级,这是在PHP 5.2没有这样的select(我没有手头testing)的情况下,你可以这样做:

 glopes @ nebm:〜$ echo“<?php echo \”hi \\ n \“;”  |  PHP
嗨

原版的:

确实有一个-r选项(虽然我不确定PHP 5.2):

 D:\> php -r“echo'hi';”;
嗨

只要确保你使用的是PHP的命令行版本。 php --version应该给你这样的事情(通知“cli”):

 D:\> php --version
 PHP 5.3.0(cli)(内置:2010年5月20日19:05:12)(DEBUG)
版权所有(c)1997-2009 The PHP Group
 Zend Engine v2.3.0,版权所有(c)1998-2009 Zend技术

在PHP的新版本中,您只需键入“php -a”,然后跳入交互模式,在那里您可以尝试使用PHP。

看看这个PHP命令行function的页面,如果你还没有。 有一些基于操作系统和双引号或单引号的问题。

我也会检查PHP的信息

php -i

查看是否在禁用CLI支持的情况下编译了 PHP(– disable -cli)。

最后不需要额外的冒号。

你可以提到php -r "echo 'hi';" 而不是php -r "echo 'hi';";

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

 php -r 'print time()."\n";' 

最简单的方法是使用-r标志。 但是,我发现它不允许多行input。 要解决这个问题,你可以这样做:

 php -r "passthru(file_get_contents('php://stdin'));" 

这可以让你从标准inputpipe道,如下所示:

 echo -n "echo 'test';" | php -r "passthru(file_get_contents('php://stdin'));" 

但是,要回答原来的问题,如果您没有-r标志可用,也可以使用-f标志 – 只需将stdin作为文件打开即可: php -f /dev/stdin

如果你这样做,请注意:a)你需要在input开始时包含一个空格,并且b)你必须用<?php打开。 例:

 echo -ne " <?php\necho 'test';" | php -f /dev/stdin 
Interesting Posts