Dennis: gzip-komprimierte Daten mit PHP-Client von Server empfangen

Beitrag lesen

Hi liebes Forum,

für ein kleines Programm schreibe ich gerade einen Clienten in PHP - dieser soll von einem Server über HTTP-Request eine Seite empfangen, dazu gehe ich so vor (gekürzt):

$fp = fsockopen("www.escape-to-space.de", 80, $errno, $errstr, 30);  
$out = "GET /pfad/seite HTTP/1.1\r\n"  
     . "Host: www.escape-to-space.de\r\n"  
     . "User-Agent: PHP-Client"  
     . "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n"  
     . "Accept-Language: de-de,de;q=0.7,en;q=0.3\r\n"  
     . "Accept-Encoding: gzip,deflate\r\n"  
     . "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"  
     . "Keep-Alive: 300\r\n"  
     . "Connection: keep-alive\r\n";  
fwrite($fp, $out);

Anschließend lese ich die Rückgabe wie auch im PHP Manual aus, mit der nachfolgenden Funktion zerlege ich dann die Header vom Inhalt:

function split_data($data) {  
  $pos = strpos($data, "\r\n\r\n");  
  $head = substr($data, 0, $pos);  
  $body = substr($data, $pos + 4);  
  if(preg_match("/Content-Encoding: gzip/", $head)) {  
    $body = gzuncompress($body); // Zeile 45  
  }  
  return array($head, $body);  
}

Ich habe sowohl die kompletten Sachen die ich vom Server erhalte in eine Datei geloggt, als das was beim Zerlegen in Header und Body bei mir raus gekommen ist.

Jetzt gibt es jedoch folgende Fehlermeldung von PHP: Warning: gzuncompress(): data error in /home/driehle/privat/ets.php on line 45

Zeile 45 ist die oben gekennzeichnete, also das dekodieren der empfangenen Daten - das scheint hier schief zu gehen.

Wie bereits gesagt habe ich die Variable $body mal in eine Datei geloggt - anschließend habe ich diese Datei über die Shell mit gunzip dekodiert, dies hat EINWANDFREI geklappt! Deshalb gehe ich davon aus, dass meine Methode zum Teilen von Headern und Body funktioniert.

Ich vermute, dass irgendwie die Informationen so von PHP nicht verarbeitet werden können, weil vl. irgendwelche Meta-Daten vorhanden sind. Gibt es eine Möglichkeit die Daten zu dekomprimieren ohne Sie in eine temporäre Datei zu schreiben?

MfG, Dennis.