12-generate-yes.php 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. <?php
  2. use React\EventLoop\Loop;
  3. require __DIR__ . '/../vendor/autoload.php';
  4. // data can be given as first argument or defaults to "y"
  5. $data = (isset($argv[1]) ? $argv[1] : 'y') . "\n";
  6. // repeat data X times in order to fill around 200 KB
  7. $data = str_repeat($data, round(200000 / strlen($data)));
  8. if (!defined('STDOUT') || stream_set_blocking(STDOUT, false) !== true) {
  9. fwrite(STDERR, 'ERROR: Unable to set STDOUT non-blocking (not CLI or Windows?)' . PHP_EOL);
  10. exit(1);
  11. }
  12. // write data to STDOUT whenever its write buffer accepts data
  13. // for illustrations purpose only, should use react/stream instead
  14. Loop::addWriteStream(STDOUT, function ($stdout) use (&$data) {
  15. // try to write data
  16. $r = fwrite($stdout, $data);
  17. // nothing could be written despite being writable => closed
  18. if ($r === 0) {
  19. Loop::removeWriteStream($stdout);
  20. fclose($stdout);
  21. stream_set_blocking($stdout, true);
  22. fwrite(STDERR, 'Stopped because STDOUT closed' . PHP_EOL);
  23. return;
  24. }
  25. // implement a very simple ring buffer, unless everything has been written at once:
  26. // everything written in this iteration will be appended for next iteration
  27. if (isset($data[$r])) {
  28. $data = substr($data, $r) . substr($data, 0, $r);
  29. }
  30. });