public function stream_read($length) { //Abstract mb_* functions $substr = function_exists('mb_substr') ? 'mb_substr' : 'substr'; $strlen = function_exists('mb_strlen') ? 'mb_strlen' : 'strlen'; //Read that stuff chunk by chunk (whatever buffersize there is) $result = $substr($this->data, $this->position, $length); $this->position += $strlen($result); return $result; }