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