2016/05/05 11:29:51

コマンドラインでちょっとPHPのコードを実行する


Warning: Attempt to read property "post_excerpt" on null in /home/kpkyvkzp/public_html/unskilled.site/wp-content/themes/unskilled2/content-header-eyecatch.php on line 5
目次(クリックするとジャンプします)
  • 1:ちょこっと実行したい
  • 2:コマンドラインでPHPを実行する
  • 3:補足・ハマったポイント
  • 4:まとめ

ちょこっと実行したい

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
  • シェル変数との干渉に注意