base64_decode.php 867 B

1234567891011121314151617181920212223242526272829
  1. <?php
  2. // $ echo test | php examples/base64_encode.php | php examples/base64_decode.php
  3. require __DIR__ . '/../vendor/autoload.php';
  4. // decoding requires buffering in chunks of 4 bytes each
  5. $buffer = '';
  6. Clue\StreamFilter\append(STDIN, function ($chunk = null) use (&$buffer) {
  7. if ($chunk === null) {
  8. if (strlen($buffer) % 4 !== 0) {
  9. throw new \UnexpectedValueException('Invalid length');
  10. }
  11. $chunk = $buffer;
  12. } else {
  13. $buffer .= $chunk;
  14. $len = strlen($buffer) - (strlen($buffer) % 4);
  15. $chunk = (string)substr($buffer, 0, $len);
  16. $buffer = (string)substr($buffer, $len);
  17. }
  18. $ret = base64_decode($chunk, true);
  19. if ($ret === false) {
  20. throw new \UnexpectedValueException('Not a valid base64 encoded chunk');
  21. }
  22. return $ret;
  23. }, STREAM_FILTER_READ);
  24. fpassthru(STDIN);