PHPで適当なパイプ検知

  • 1
    いいね
  • 0
    コメント

標準入力で何か渡されているかの判定。

真面目にやるとストリームで徐々に渡されたらどうするの、みたいなのも考えないと駄目。
すごい適当にやる場合の話。

<?php
$stdin = fopen('php://stdin', 'r');
stream_set_blocking($stdin, false);
$in = stream_get_contents($stdin);

if ($in) {
  // なんか渡されたらしい
  echo $in;
  // ...
} else {
  // なにも渡されなかったらしい
  // ...
}
$ echo 123 | php tekito.php
  • ノンブロッキングモードにしないと、何も渡ってきてないときに待ちが発生して進まなくなってしまう
  • STDIN 定数は php -a など、状況によっては定義されていないので、諦めてfopenで作ったほうがinteropが上がる