<?php 
 
require __DIR__ . '/../vendor/autoload.php'; 
 
// data can be given as first argument or defaults to "y" 
$data = (isset($argv[1]) ? $argv[1] : 'y') . "\n"; 
 
// repeat data X times in order to fill around 200 KB 
$data = str_repeat($data, round(200000 / strlen($data))); 
 
$loop = React\EventLoop\Factory::create(); 
 
if (!defined('STDOUT') || stream_set_blocking(STDOUT, false) !== true) { 
    fwrite(STDERR, 'ERROR: Unable to set STDOUT non-blocking (not CLI or Windows?)' . PHP_EOL); 
    exit(1); 
} 
 
// write data to STDOUT whenever its write buffer accepts data 
// for illustrations purpose only, should use react/stream instead 
$loop->addWriteStream(STDOUT, function ($stdout) use ($loop, &$data) { 
    // try to write data 
    $r = fwrite($stdout, $data); 
 
    // nothing could be written despite being writable => closed 
    if ($r === 0) { 
        $loop->removeWriteStream($stdout); 
        fclose($stdout); 
        stream_set_blocking($stdout, true); 
        fwrite(STDERR, 'Stopped because STDOUT closed' . PHP_EOL); 
 
        return; 
    } 
 
    // implement a very simple ring buffer, unless everything has been written at once: 
    // everything written in this iteration will be appended for next iteration 
    if (isset($data[$r])) { 
        $data = substr($data, $r) . substr($data, 0, $r); 
    } 
}); 
 
$loop->run(); 
 
 |