3v4l.org

run code in 500+ PHP versions simultaneously
<?php class NoConsumedFilter extends php_user_filter { function filter($in, $out, &$consumed, $closing) { while ($bucket = stream_bucket_make_writeable($in)) { // Do NOT update $consumed $bucket->data = strtoupper($bucket->data); stream_bucket_append($out, $bucket); } return PSFS_PASS_ON; } } class YesConsumedFilter extends php_user_filter { function filter($in, $out, &$consumed, $closing) { while ($bucket = stream_bucket_make_writeable($in)) { $consumed += $bucket->datalen; $bucket->data = strtoupper($bucket->data); stream_bucket_append($out, $bucket); } return PSFS_PASS_ON; } } stream_filter_register('no_consumed', 'NoConsumedFilter'); stream_filter_register('yes_consumed', 'YesConsumedFilter'); $filters = array('no_consumed', 'yes_consumed'); foreach ($filters as $filter) { $fp = tmpfile(); fwrite($fp, 'hello world'); rewind($fp); stream_filter_append($fp, $filter, STREAM_FILTER_READ); $data = fread($fp, 5); $pos = ftell($fp); $more = fread($fp, 100); $eof = feof($fp); echo $filter . ": first='" . $data . "' ftell=" . $pos . " rest='" . $more . "' eof=" . ($eof ? 'Y' : 'N') . "\n"; fclose($fp); }

preferences:
59.66 ms | 2886 KiB | 5 Q