PHP 5.1.0 以降では、--with-readline オプションつきで PHP をコンパイルした場合に CLI SAPI で対話シェルが使えるようになりました。 対話シェルは、-a オプションで使うことができます。 PHP 7.1.0 以降では、readline エクステンション が有効であれば 対話シェルは Windows 上でも使用可能です。
対話シェルを使うと、PHP のコードを打ち込んで直接実行できるようになります。
例1 対話シェル上でのコードの実行
$ php -a
Interactive shell
php > echo 5+8;
13
php > function addTwo($n)
php > {
php { return $n + 2;
php { }
php > var_dump(addtwo(2));
int(4)
php >
対話シェル上では、タブ補完機能を使って 関数や定数、クラス名、変数名、静的なメソッドコール、そしてクラス定数を補完することができます。
例2 タブ補完
補完候補が複数あるときにタブキーを二度押すと、 補完候補の一覧が表示されます。
php > strp[TAB][TAB] strpbrk strpos strptime php > strp
候補がひとつしかないときは、タブキーを一度押せば残りを補完してくれます。
php > strpt[TAB]ime(
対話シェルのセッション上で定義したものについても補完することができます。
php > $fooThisIsAReallyLongVariableName = 42; php > $foo[TAB]ThisIsAReallyLongVariableName
対話シェル上では操作履歴が保存され、上矢印キーと下矢印キーで履歴にアクセスすることができます。 履歴の保存先は ~/.php_history ファイルです。
PHP 5.4.0 以降、CLI SAPI に二つの新たな
php.ini 設定が追加されました。cli.pager と
cli.prompt です。cli.pager
は、外部のプログラム (less など)
を出力のページャとして指定することができます。
出力が画面に直接送られるかわりに、このページャに送られるようになります。
cli.prompt を指定すると、
php > プロンプトを変更することができます。
また、PHP 5.4.0 以降では、対話シェルの中で php.ini 項目を設定する際に短縮記法が使えるようにもなりました。
例3 対話シェル内での php.ini の設定
cli.prompt を設定します。
php > #cli.prompt=hello world :> hello world :>
バッククォートを使うと、PHP のコードの実行結果をプロンプトとして用いることができます。
php > #cli.prompt=`echo date('H:i:s');` php >
15:49:35 php > echo 'hi';
hi
15:49:43 php > sleep(2);
15:49:45 php >
ページャを less に設定します。
php > #cli.pager=less php > phpinfo(); (出力が less に送られます) php >
cli.prompt の設定は、次のようなエスケープシーケンスに対応しています。
| シーケンス | 説明 |
|---|---|
| \e | プロンプトに色をつけます。たとえば \e[032m\v \e[031m\b \e[34m\> \e[0m のように使います。 |
| \v | PHP のバージョン。 |
| \b | PHP が今どのブロックにいるのかを示します。たとえば、 複数行コメントの中にいる場合は /* となります。 外側のスコープは php で表します。 |
| \> | プロンプト文字を示します。デフォルトでは > ですが、ブロックや文字列の途中にあるときは変わります。 ' " { ( > のような文字になることがあります。 |
注意:
auto_prepend_file および auto_append_file で インクルードされたファイルはこのモードでもパースされますが、 いくつかの制限があります。例えば、関数はそれがコールされる前に 定義されていなければなりません。
注意:
オートローディング は、PHP を CLI の対話モードで実行している場合は使用できません。