在命令行上执行一串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