次のオプションがどのように機能するかと同様に、コマンドラインでPHPコードの行を実行できるようにしたいと思います。
:~> Perl -e "print 'hi';"
:~> python -c "print 'hi'"
:~> Ruby -e "puts 'hi'"
私ができるようにしたい:
:~> php "echo 'hi';"
Phpに必要なことを実行できる-rオプションがあることを読みましたが、使用しようとすると利用できないようです。 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
混乱させて申し訳ありません。
EDIT2:うん、それは PHP 5.2の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 PHP Group Zend Engine v2.3.0、Copyright(c)1998-2009 Zend Technologies
PHPの新しいバージョンでは、「php -a」と入力するだけで、PHPを試すことができるインタラクティブモードにジャンプします。
最も簡単な方法は、-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
最後に余分なセミコロンは必要ありません。
php -r "echo 'hi';"
の代わりに php -r "echo 'hi';";
別の例(コマンドラインで現在のタイムスタンプを取得するには):
php -r 'print time()."\n";'
PHPコマンドライン機能 のこのページをご覧ください(まだお持ちでない場合)。 OSと二重引用符または単一引用符に基づく問題に関する投稿があります。
また、PHP情報も確認します
php -i
PHP=が CLIサポートを無効にしてコンパイルされている (--disable-cli)であるかどうかを確認します。