aboutsummaryrefslogtreecommitdiffhomepage
path: root/assets/php/vendor/react/event-loop/examples/11-consume-stdin.php
blob: 2a7724555bc080345b545aefa09fc39fc739fa1c (plain) (blame)
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
<?php

use React\EventLoop\Factory;

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);
}

$loop = Factory::create();

// read everything from STDIN and report number of bytes
// for illustration purposes only, should use react/stream instead
$loop->addReadStream(STDIN, function ($stream) use ($loop) {
    $chunk = fread($stream, 64 * 1024);

    // reading nothing means we reached EOF
    if ($chunk === '') {
        $loop->removeReadStream($stream);
        stream_set_blocking($stream, true);
        fclose($stream);
        return;
    }

    echo strlen($chunk) . ' bytes' . PHP_EOL;
});

$loop->run();