Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

Interactive modeとInteractive shell

via. 75. PHPの便利なコマンドラインオプションを再発見 | 日経 xTECH(クロステック)

PHP5.1以降、CLIphpの「-a」オプションで対話モード(Interactive mode)になるわけですが、

$ php -a
Interactive mode enabled

<?php
var_dump(date('Ymd'));
string(8) "20081205"

のように「<?php」を付けなきゃいけません。全然いけてないです><
で、75. PHPの便利なコマンドラインオプションを再発見 | 日経 xTECH(クロステック)でアシアルの田中さんがいろいろと書いてます。このうち、


--with-readlineオプションを有効にしてPHPコンパイルすると、さらに機能が強化されたInteractive Shell(名前も変わります)を実行できます。

のとおりに、build時に--with-readlineオプションを付けると、対話シェル(Interactive Shell)になります。こちらは「<?php」を付ける必要がありません。

$ php -a
Interactive shell

php > var_dump(date('Ymd'));
string(8) "20081205"
php >

ちなみに、sharedでbuildするとどうなるかというと、対話モード(Interactive mode)のままです。たとえば、sapi/cli/php_cli.cの982行目(PHP5.2.7)を見てみると、

    981         if (interactive) {
    982 #if (HAVE_LIBREADLINE || HAVE_LIBEDIT) && !defined(COMPILE_DL_READLINE)
    983             printf("Interactive shell\n\n");
    984 #else
    985             printf("Interactive mode enabled\n\n");
    986 #endif
    987             fflush(stdout);
    988         }

となっていて、「readlineが動的モジュールとしてコンパイルしてない場合」という条件が付いてました。その他、実装部分も同様です。
ということで、オプションを付けていない場合、再buildする必要があります。