我希望能够在命令行上运行一行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选项?如果是这样,为什么我运行时无法使用--help?如果没有-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
很抱歉这个混乱。
答案 0 :(得分:79)
EDIT2:是的,它出现在PHP 5.2's cli SAPI。
编辑:如果你无法升级,那就是PHP 5.2中没有这样的选项(我手边没有测试),你可以这样做:
glopes@nebm:~$ echo "<?php echo \"hi\\n\";" | php hi
原件:
确实有一个-r
选项(虽然我不确定PHP 5.2):
D:\>php -r "echo 'hi';"; hi
确保使用PHP的命令行版本。 php --version
应该给你这样的东西(注意“cli”):
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
答案 1 :(得分:10)
在PHP的新版本中,您只需键入“php -a”,然后跳转到交互模式,即可在其中试验PHP。
答案 2 :(得分:4)
最后不需要额外的半结肠。
您可以提及php -r "echo 'hi';"
而不是php -r "echo 'hi';";
另一个例子(在命令行获取当前时间戳):
php -r 'print time()."\n";'
答案 3 :(得分:3)
如果您还没有,请查看PHP command line features上的此页面。基于操作系统和双引号或单引号的问题有一些帖子。
我还会检查PHP信息
php -i
查看PHP是否为compiled with CLI support disabled( - disable-cli)。
答案 4 :(得分:3)
最简单的方法是使用-r标志。但是,我发现它不允许多行输入。要解决这个问题,你可以这样做:
php -r "passthru(file_get_contents('php://stdin'));"
它允许你从stdin管道,如下:
echo -n "echo 'test';" | php -r "passthru(file_get_contents('php://stdin'));"
但是,要回答原始问题,如果您没有-r标志,也可以使用-f标志 - 只需将stdin作为要打开的文件传递:php -f /dev/stdin
如果这样做,请注意a)您需要在输入的开头包含空格,b)您必须使用<?php
打开。例如:
echo -ne " <?php\necho 'test';" | php -f /dev/stdin