Posted at

PHPで適当なパイプ検知

More than 1 year has passed since last update.

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

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

すごい適当にやる場合の話。

<?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が上がる