forked from revoltphp/event-loop
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconsume-stdin.php
32 lines (23 loc) · 871 Bytes
/
consume-stdin.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
declare(strict_types=1);
use Revolt\EventLoop;
require __DIR__ . '/../vendor/autoload.php';
if (!\defined('STDIN') || \stream_set_blocking(STDIN, false) !== true) {
\fwrite(STDERR, 'ERROR: Unable to set STDIN non-blocking (not CLI or Windows?)' . PHP_EOL);
exit(1);
}
// read everything from STDIN and report number of bytes
// for illustration purposes only, should use a package of
// choice abstracting streams instead, that handles edge cases well
EventLoop::onReadable(STDIN, static function (string $watcher, $stream): void {
$chunk = \trim(\fread($stream, 64 * 1024));
// reading nothing means we reached EOF
if ($chunk === '') {
EventLoop::cancel($watcher);
\stream_set_blocking($stream, true);
\fclose($stream);
return;
}
echo \strlen($chunk) . ' bytes' . PHP_EOL;
});
EventLoop::run();