Hallo,
aus mir nicht nachvollziehbaren Gründen schlägt eine Dekompression von ausgelesenen Daten, die von einem Webserver stammen, fehl.
Folgende Funktion ist Teil eines Objekts:
function getHTTP($l){
# sendet einen HTTP-Request
$flag=true;
$s=@stream_socket_client(((substr($l[0],-1)=='p') ? 'tcp://' : 'ssl://').$l[1].':'.$l[2],$er,$es,10);
if(is_resource($s)){
if($l[1]==$this->host)
fwrite($s,'GET '.$l[3]." HTTP/1.1\r\n");
else{
fwrite($s,'HEAD '.$l[3]." HTTP/1.1\r\n");
$flag=false;
}
fwrite($s,'Host: '.$l[1]."\r\n");
fwrite($s,"Accept: */*;q=0.9\r\n");
fwrite($s,"Accept-Encoding: gzip,deflate;q=0.9\r\n");
fwrite($s,"keep-Alive: 60\r\n");
fwrite($s,"Connection: keep-alive\r\n\r\n");
$size=false;
$cont=false;
if(substr(fgets($s),9,3)==200){
do{ $t=explode(":",fgets($s,21000),2);
if(strtolower($t[0])=='content-encoding') $cont=trim($t[1]);
elseif(strtolower($t[0])=='content-length') $size=trim($t[1]);
}while($t[0]!="\r\n");
if($flag){
$t='';
while(!feof($s)){
$t.=fread($s,$size ? $size : 4096);
if(strlen($t)>1048575){
$this->error='Resource über 1 MB groß';
break;
}
}
if($cont)
if(stristr($cont,'deflate')!==false)
$t=gzinflate($t);
else $t=gzuncompress($t); // Zeile 93
}
$this->content=$t;
}
else $this->error='Resource nicht da';
}
else $this->error='keine Verbindung';
}
Fehlermeldung:
Warning: gzuncompress(): data error in /opt/php/testscripts/x.php on line 93
Gruß aus Berlin!
eddi