Rainer: Headerinformationen ausblenden

Hallo,

ich habe folgenden Code um eine Website über ein PHP einzulesen und dann auszugeben. Funktioniert so weit ganz gut, jedoch wird immer so etwas mit ausgegeben:

  
HTTP/1.1 200 OK Date: Sun, 30 Dec 2007 21:52:31 GMT Server: Apache Last-Modified: Sun, 30 Dec 2007 21:00:05 GMT ETag: "14546-363f9f40" Accept-Ranges: bytes Content-Length: 83270 Connection: close Content-Type: text/html  

wie werde ich das los?

  
<?php  
if (!isset($_GET['site'])) {  
 $fp = fsockopen ("www.example.com", 80, $errno, $errstr, 30);  
 if (!$fp) {  
  echo "$errstr ($errno)<br />\n";  
 }  
 else {  
  fputs($fp, "GET / HTTP/1.0\r\n\r\n");  
  while (!feof($fp)) {  
   echo fgets($fp,128);  
  }  
  fclose($fp);  
 }  
}  
?>  

Gruß
Rainer

  1. echo $begrüßung;

    ich habe folgenden Code um eine Website über ein PHP einzulesen und dann auszugeben. Funktioniert so weit ganz gut, jedoch wird immer so etwas mit ausgegeben:
    [ code lang=html]

    Das ist kein HTML sondern ein HTTP-Header.

    HTTP/1.1 200 OK Date: Sun, 30 Dec 2007 21:52:31 GMT Server: Apache Last-Modified: Sun, 30 Dec 2007 21:00:05 GMT ETag: "14546-363f9f40" Accept-Ranges: bytes Content-Length: 83270 Connection: close Content-Type: text/html

    Der hört per Definition nach dem ersten zu findenden \r\n\r\n auf. Wenn der Webserver nicht richtig programmiert ist, könnte der auch nur \n\n senden.

    echo "$verabschiedung $name";

  2. Hi,

    ich habe folgenden Code um eine Website über ein PHP einzulesen und dann auszugeben. Funktioniert so weit ganz gut, jedoch wird immer so etwas mit ausgegeben:

    HTTP/1.1 200 OK Date: Sun, 30 Dec 2007 21:52:31 GMT Server: Apache Last-Modified: Sun, 30 Dec 2007 21:00:05 GMT ETag: "14546-363f9f40" Accept-Ranges: bytes Content-Length: 83270 Connection: close Content-Type: text/html

    wie werde ich das los?

    Indem du es abschneidest ...

    Erst mal alles in eine Stringvariable einlesen - und dann nach dem ersten Auftauchen eines doppelten Zeilenumbruchs (\r\n\r\n) auftrennen, der bekanntlich HTTP Header von HTTP Body trennt.

    MfG ChrisB

    1. Hi,

      Erst mal alles in eine Stringvariable einlesen - und dann nach dem ersten Auftauchen eines doppelten Zeilenumbruchs (\r\n\r\n) auftrennen, der bekanntlich HTTP Header von HTTP Body trennt.

      und mit was und wie?

      Gruß
      Rainer

      1. Hello,

        Erst mal alles in eine Stringvariable einlesen - und dann nach dem ersten Auftauchen eines doppelten Zeilenumbruchs (\r\n\r\n) auftrennen, der bekanntlich HTTP Header von HTTP Body trennt.

        und mit was und wie?

        Wie wäre es mit einer Stringfunktion?
        Stelle suchen, merken und daran auftrennen.

        mit   <http://de.php.net/manual/en/function.strpos.php
          und   [link:http://de.php.net/manual/en/function.substr.php

        oder mit

        [link:http://de.php.net/manual/en/function.strstr.php>

        oder mit einer Array-Funktion

        http://de.php.net/manual/en/function.substr.php

        oder mit einer Regular Expression

        http://de.php.net/manual/en/function.preg-split.php

        Mehr fällt mir im Moment leider nicht ein.

        Harzliche Grüße aus
        Sankt Andreasberg
        und Guten Rutsch

        Tom

        --
        Nur selber lernen macht schlau

      2. Hi Rainer,

        und mit was und wie?

        Zum Beispiel mit explode(), dann wirst du ein Array mit mehreren Elementen bekommen, das erste enthält die Header, alle weiteren sind Teile des Bodys. Du kannst mit unset() das erste Array-Element löschen und die restlichen Elemente wieder mit implode() zusammenfügen.

        Eleganter wäre es allerdings, wenn du mit strpos() die Position des ersten Auftretens von "\r\n\r\n" im String ermittelst und dann mit substr() den entsprechenden Teil vom String wegschneidest.

        Viele Grüße,
          ~ Dennis.

        1. echo $begrüßung;

          Zum Beispiel mit explode(), dann wirst du ein Array mit mehreren Elementen bekommen,

          explode() kennt einen dritten Parameter, der angibt, wieviele Bruchstücke man haben möchte. (Ist übrigens auf der von dir verlinkten Handbuchseite erwähnt.) Zusammen mit list() lässt sich der zweite Teil recht elegant in eine Variable bringen:

          list(, $httpBody) = explode("\r\n\r\n", $httpResponse, 2);

          Wenn man die HTTP-Header noch benötigt, kann man dem list() noch eine weitere Variable als ersten Parameter mitgeben.

          echo "$verabschiedung $name";