. * * Consult LICENSE file for details ************************************************/ /* Define our filter class * * Usage: stream_filter_append($stream, 'padding.X'); * where X is a number a stream will be padded to be * multiple of (e.g. padding.3 will pad the stream * to be multiple of 3 which is useful in base64 * encoding). * * */ class padding_filter extends php_user_filter { private $padding = 4; // default padding /** * This method is called whenever data is read from or written to the attached stream * * @see php_user_filter::filter() * * @param resource $in * @param resource $out * @param int $consumed * @param boolean $closing * * @access public * @return int * */ function filter($in, $out, &$consumed, $closing) { while ($bucket = stream_bucket_make_writeable($in)) { if ($this->padding != 0 && $bucket->datalen < 8192) { $bucket->data .= str_pad($bucket->data, $this->padding, 0x0); } $consumed += ($this->padding != 0 && $bucket->datalen < 8192) ? ($bucket->datalen + $this->padding) : $bucket->datalen; stream_bucket_append($out, $bucket); } return PSFS_PASS_ON; } /** * Called when creating the filter * * @see php_user_filter::onCreate() * * @access public * @return boolean */ function onCreate() { $delim = strrpos($this->filtername, '.'); if ($delim !== false) { $padding = substr($this->filtername, $delim + 1); if (is_numeric($padding)) $this->padding = $padding; } return true; } } stream_filter_register("padding.*", "padding_filter"); ?>