note 118461 added to wrappers.compression
| From: | feodor at ctm dot ru | Date: | Thu, 10 Dec 2015 13:13:42 +0000 |
| Subject: | note 118461 added to wrappers.compression | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-204320@lists.php.net to get a copy of this message | ||
Prior to PHP 5.6 i used code like
<?php
file_get_contents("compress.zlib://php://input");
?>
to read gz-compressed or plain input file. Not it doesn't work.
Simple workaround :
<?php
//file_get_contents("compress.zlib://php://input");
class gzip_header_filter8 extends php_user_filter {
private $filtered = 0;
public function filter($in, $out, &$consumed, $closing) {
while ($bucket = stream_bucket_make_writeable($in)) {
if($this->filtered == 0) {
$header_len = 8;
$header = substr($bucket->data, 0, 8);
$flags = ord($header[1]);
if($flags & 0x08) {
// a filename is present
$header_len = strpos($bucket->data, "\0", 8) + 1;
}
$bucket->data = substr($bucket->data, $header_len);
$this->filtered = $header_len;
}
$consumed += $bucket->datalen;
stream_bucket_append($out, $bucket);
}
return PSFS_PASS_ON;
}
}
stream_filter_register('gzip_header_filter8', 'gzip_header_filter8');
$READ_LEN = 64*1024;
$MAX_BUF_LEN = $READ_LEN*1024;
$mode_plain=true;
$src=fopen("php://input","rb"); //test if OK!!!!
$magic_number=fread($src,2);
$input="";
if(strlen($magic_number)==2)
if(
(ord($magic_number[0])==31)
&& (ord($magic_number[1])==139)
)
{
$mode_plain=false;
stream_filter_append($src, "gzip_header_filter8", STREAM_FILTER_READ);
stream_filter_append($src, "zlib.inflate", STREAM_FILTER_READ);
}
else
{
$input=$magic_number;
}
/* read starts here*/
$k = 0;
while (!feof($src) && $k <= $MAX_BUF_LEN) {
$inp = fread($src,$READ_LEN);
$k += strlen($inp);
$input.=$inp;
}
echo $input;
fclose($src);
?>
----
Server IP: 72.52.91.14
Probable Submitter: 91.220.57.129
----
Manual Page -- http://php.net/manual/en/wrappers.compression.php
Edit -- https://master.php.net/note/edit/118461
Del: integrated -- https://master.php.net/note/delete/118461/integrated
Del: useless -- https://master.php.net/note/delete/118461/useless
Del: bad code -- https://master.php.net/note/delete/118461/bad+code
Del: spam -- https://master.php.net/note/delete/118461/spam
Del: non-english -- https://master.php.net/note/delete/118461/non-english
Del: in docs -- https://master.php.net/note/delete/118461/in+docs
Del: other reasons-- https://master.php.net/note/delete/118461
Reject -- https://master.php.net/note/reject/118461
Search -- https://master.php.net/manage/user-notes.php