-->

2010-04-11

php で標準入力を取得する例

function getStdin()
{
    $ret = "";
    $fp = fopen("php://stdin", "r");
    if (is_resource($fp))
    {
        $cnt = 0;
        stream_set_blocking($fp, 0);
        do
        {
            $buf = fread($fp, 512);
            if ($buf === "")
            {
                $cnt++;
                if ($cnt > 15)
                {
                    break;
                }
            }
            else
            {
                $cnt = 0;
                $ret .= $buf;
            }
        }
        while (1);
        fclose($fp);
    }
    return $ret;
}

手前のコマンドがゆっくり出力される場合、失敗します。
$ for i in $(seq 1 3); do echo $i; sleep 1; done
1
2
3
$ for i in $(seq 1 3); do echo $i; sleep 1; done | php wagnek.php
  2| Basic Latin    |   1| 1
  1| Control Code...|   1| \n

必ず標準入力が有る場合 stream_set_blocking($fp, 0); をコメントアウトすると良いです。

0 件のコメント: