ちょこっと実行したい
PHPは一般的にサーバ上で実行され、ブラウザ上で結果が表示されるようにつかわれますが、ちょっとしたテストやバッチスクリプト的に使いたい時はコマンドラインからコードを実行できると便利です。
コマンドラインでPHPを実行する
PHPではr
オプションを使うことで、コマンドラインで任意のコードを実行することが可能です。
-r –run
このオプションにより、コマンドラインのみで PHP の実行ができるようになります。 PHP の開始および終了タグ () は不要で、これらを付けると パーサエラーとなります。PHPマニュアル コマンドラインオプション
http://php.net/manual/ja/features.commandline.options.php
たとえばphpinfo
を確認したいと場合、いちいちそれ用のファイルを作って…ブラウザに表示させて…は結構面倒です。
以下の様にするとコマンドライン上でphpinfo
を確認できます。
$ php -r 'phpinfo();'
php -r
に続けて’
(シングルコーテーション)でくくったコードを書きます。行最後の;
(セミコロン)は必要ですが、<?php
?>
は必要ありません。
これでコマンドラインにphpinfo
の情報が出力されます。
phpinfo
は出力が比較的長いのでこのままだと画面に収まらない可能性が高いです。以下のようにパイプで出力をページャ等に流すことももちろん可能です。
$ php -r 'phpinfo();' | less
またリダイレクトでファイル化するのいいかもしれません。
phpinfoだけではなくphpの関数・コードであれば実行できるので、ちょこっとPHPを実行したい時には便利かと思いマス。
$ php -r 'phpinfo();' > phpinfo.txt
補足・ハマったポイント
コードを’
(シングルコーテーション)でくくるのはシェルコマンドとの干渉を避けるためです。これはマニュアルにも説明がありますが、"
(ダブルコーテーション)でくくった場合、多くのシェルではその中身を展開しようとします。
例えば以下の例です。
$ php -r "$hoge = 100; echo $hoge;"
このラインはまずシェルによって解析されます。"
でくくられているので、シェルは中身の$hoge
を展開しようとします。
この時シェル変数としてhogeが定義されていなければhogeは空文字で展開されます。つまり以下のようになります。
$ php -r " = 100; echo $hoge;"
この状態ではPHPでも実行できるコードではありませんので、エラーがでます。
PHP Parse error: syntax error, unexpected '=' in Command line code on line 1
しかし’
であれば…
$ php -r '$hoge = 100; echo $hoge;'
エラーは出ずに実行できます。
100
まとめ
- PHPの任意のコードをコマンドラインから実行したい場合は
r
オプションを使う - パイプ・リダイレクトと組み合わせももちろんO
- シェル変数との干渉に注意