How to check if bash input is being redirect to PHP script? -
i'm writing php script , able optionally use file script input. way:
$ php script.php < file.txt i'm, actually, able using file_get_contents:
$data = file_get_contents('php://stdin'); however, if don't pass file input, scripts hangs indefinetelly, waiting input.
i tried following, didn't work:
$data = ''; $in = fopen('php://stdin', 'r'); { $bytes = fread($in, 4096); // maybe input empty here?! no, it's not :( if (empty($bytes)) { break; } $data .= $bytes; } while (!feof($in)); the script waits fread return value, never returns. guess waits input same way file_get_contents does.
another attempt made replacing do { ... } while loop while { ... }, checking eof before trying read input. didn't work.
any ideas on how can achieve that?
you can set stdin non-blocking via stream_set_blocking() function.
function stdin() { $stdin = ''; $fh = fopen('php://stdin', 'r'); stream_set_blocking($fh, false); while (($line = fgets($fh)) !== false) { $stdin .= $line; } return $stdin; } $stdin = stdin(); // returns contents of stdin or empty string if nothing ready obviously, can change use of line-at-a-time fgets() hunk-at-a-time fread() per needs.
Comments
Post a Comment