読者です 読者をやめる 読者になる 読者になる

PHP5.4のインタラクティブシェル: 細かな改善 (PHP5.4 Advent Calendar2011 一日目)

PHPに限らず、プログラミング言語のちょっとした挙動や関数の動作を確認したいときがよくあります。そういう時、何か小さなコードをエディタで書いてコマンドラインで実行するのも良いですが、インタラクティブシェルを使うとより便利です。また、PHP5.4.0RC2の時点でインタラクティブシェルに関する細かな改善もあります。

この記事では、PHP5.4でのインタラクティブシェルを紹介します。

導入

PHPインタラクティブシェルを利用する場合、configure時にオプションを指定する必要があります。PHP5.4RC2をダウンロードし、configure時に--with-readlineオプションにreadlineがインストールされているディレクトリを指定してビルドするとインタラクティブシェルが利用できるようになります。

$ cd path/to/php-5.4.0RC2
$ ./configure --with-readline=/path/to/lib
$ make

readlineがない場合でも、代わりに--with-libeditオプションを指定することで有効に出来ます。

利用

CLIから-aオプションを付けてPHPを起動するとインタラクティブシェルが起動します。ここからコマンドライン上でPHPのコードを打つことができます。

$ sapi/cli/php -a
Interactive shell

php > echo "hogehoge\n";
hogehoge
php > 

関数を入力する途中でTABを押すと関数名やファイル名を補完してくれます。
また、php.iniの設定も#hoge=fugaという形式を入力することで簡単に切り替えられるようになっています。

php > #arg_separator.output=&
php > echo http_build_query(["hoge" => "fuga", "foo" => "bar"]) . "\n";
hoge=fuga&foo=bar
php > #arg_separator.output=&
php > echo http_build_query(["hoge" => "fuga", "foo" => "bar"]) . "\n";
hoge=fuga&foo=bar

インタラクティブシェル関係のini設定も増えて、ページャやプロンプトを指定できるようになりました。

php > #cli.pager=less
php > foreach (range(0, 1000) as $i) { echo $i . "\n"; }
(lessが適用されて表示される)
php > #cli.prompt=hoge >
hoge >

他にも細かな点ですがfatal errorになってもシェルが終了しないようにもなっています。

終わり

というわけで、PHP5.4のインタラクティブシェルを紹介しました。ちょっとしたスクリプトやライブラリの動作を確かめるのに便利ですね。

この記事は、PHP5.4 Advent Calendar 2011の一日目として記しました。まだまだ参加者募集中です。次は@yohgakiさんお願いいたしますー。