Dirk: Quelltext von anderer HTML-Seite speichern und auswerten

Hallo,

um vielleicht eins vornweg zu nehmen. Ich möchte keine fremden Seiten ausspionieren. Der Zugriff auf diese Seite wurde mir vom Besitzer genehmigt.

Nun zu meinem Problem. Ich möchte gern den Quelltext einer HTML-Seite temporär speichern, um ihn dann nach einem gewissen Wert zu durchsuchen. Ich habe mittels PHP folgendes Script:

<?php

define ("TEST",1024*1024);
$url = "http://www.testseite.de/test.html?art=12345";

$fp = fopen($url,"r");
if(!$fp)
{
  echo "Seite $url ist nicht ereichbar !<br>";
  exit;
}

$data = fread($fp,TEST);
fclose($fp);

echo "<pre>";
echo htmlentities($data);
echo "</pre>";

?>

Wie aus der URL zu lesen, wird eine Abfrage in einer DB gemacht, und dann als HTML-Seite angezeigt. Das Script funktioniert auch. Leider wird aber nur etwa ein drittel des Quelltextes gespeichert. Wenn die Seite in verschiedenen Browsern angezeigt wird, und man schaut sich den Quelltext an, ist alles vorhanden.
Woran kann das liegen ?
Ich wäre für jede Hilfe sehr dankbar.

MfG
Dirk

  1. Hello,

    <?php

    define ("TEST",1024*1024);
    $url = "http://www.testseite.de/test.html?art=12345";

    $fp = fopen($url,"r");
    if(!$fp)
    {
      echo "Seite $url ist nicht ereichbar !<br>";
      exit;
    }

    $data = fread($fp,TEST);

    #fclose($fp);

    echo "<pre>";
    echo htmlentities($data);

    echo feof($fp)?"Fileende erreicht":"noch mittendrin";

    echo "</pre>";

    fclose($fp);

    ?>

    Wie aus der URL zu lesen, wird eine Abfrage in einer DB gemacht, und dann als HTML-Seite angezeigt. Das Script funktioniert auch. Leider wird aber nur etwa ein drittel des Quelltextes gespeichert. Wenn die Seite in verschiedenen Browsern angezeigt wird, und man schaut sich den Quelltext an, ist alles vorhanden.
    Woran kann das liegen ?
    Ich wäre für jede Hilfe sehr dankbar.

    MfG
    Dirk

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    1. Hallo,

      danke für die schnelle Antwort. Ich habe des Script geändert und nocht mal getestet. Jetzt steht am Ende des Quelltextes "noch mittendrin". Ich nehme mal an, das die Abfrage an die DB zu lang dauert, und dadurch nur ein Teil des Quelltextes zu sehen ist.
      Sollte das so sein, kann man dieses Problem beheben ?

      Gruß
      Dirk

      1. Hello Dirk,

        danke für die schnelle Antwort. Ich habe des Script geändert und nocht mal getestet. Jetzt steht am Ende des Quelltextes "noch mittendrin". Ich nehme mal an, das die Abfrage an die DB zu lang dauert, und dadurch nur ein Teil des Quelltextes zu sehen ist.
        Sollte das so sein, kann man dieses Problem beheben ?

        Ich habe das eben bei mir nochmal ausprobiert und es funktioniert einwandfrei. Lass Dir auch mal ausgeben, wieviel Bytes du schaffst, also wie groß $data geworden ist.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        1. Hallo Tom,

          also die Länge des Strings $data ist 2301 Bytes. Jetzt fragt sich nur, wo der Rest vom Quelltext ist. :-)

          Gruß
          Dirk

          1. Hello,

            also die Länge des Strings $data ist 2301 Bytes. Jetzt fragt sich nur, wo der Rest vom Quelltext ist. :-)

            Ist das denn die Länge der Seite, oder müsste die länger sein? Wenn feof() noch true ergibt, wurde ja nicht bis zum Ende gelesen.

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            1. Hello,

              Wenn feof() noch NICHT true ergibt, wurde ja nicht bis zum Ende gelesen.

              Hatte ich auch im Kopf, hab's aber nicht geschrieben.

              Liebe Grüße aus http://www.braunschweig.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              1. Hallo Tom,

                also wenn ich mal den Quelltext vom Browser speicher, dann ist die Textdatei ca. 45600 Bytes groß. Es ist also ziemlich viel Quelltext.
                Aber wie gesagt, beim Script sind es nur 2301. Die restlichen 43300 Bytes werden nicht gelesen. Aber warum ?

                Gruß
                Dirk

                1. Hello,

                  also wenn ich mal den Quelltext vom Browser speicher, dann ist die Textdatei ca. 45600 Bytes groß. Es ist also ziemlich viel Quelltext.
                  Aber wie gesagt, beim Script sind es nur 2301. Die restlichen 43300 Bytes werden nicht gelesen. Aber warum ?

                  Wäre natürlich klasse, wenn man noch an den Status-Error der Socket-Verbindung herankäme. Aber da wüsste ich nicht, wie. PHP wird den wohl verschlucken.

                  Liebe Grüße aus http://www.braunschweig.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  1. Hallo,

                    das mit dem Abfragen des Status-Error der Socket-Verbindung klappt leider nicht. Schade, kann man nichts machen. Vielleicht finde ich irgendwie noch eine andere Lösung. Trotzdem vielen Dank für deine Hilfe.

                    Gruß
                    Dirk

  2. Hallo,

    Nun zu meinem Problem. Ich möchte gern den Quelltext einer HTML-Seite temporär speichern, um ihn dann nach einem gewissen Wert zu durchsuchen.

    Das schreit fuer mich foermlich nach
    file_get_contents()  (verfuegbar seit PHP 4.3.0)
    http://www.php.net/manual/de/function.file-get-contents.php

    Ob das allerdings "zuverlaessiger" oder "geduldiger" ist
    als das von Dir verwendete fopen(), weiss ich nicht.

    Auch nicht, ob hier set_time_limit() etwas bringen koennte.
    http://www.php.net/manual/de/function.set-time-limit.php

    Vielleicht bringt Dir
    http://www.php.net/manual/de/features.connection-handling.php
    noch die eine oder andere Idee...

    Gruesse,

    Thomas

    1. Hallo Thomas,

      vielen Dank für deinen Tipp. Ich habe das Problem gelöst. Warum so schwer machen, wenn es auch einfach geht. So schaut es aus, wenn es funktionieren soll:

      <?php
      $lines = file ('http://www.testseite.de/test.html?art=12345');

      foreach ($lines as $line_num => $line) {
         echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br>\n";
      }
      ?>

      Das ist alles, was man zum Leben braucht ! :-)

      Also, nochmals vielen Dank an alle. Jetzt kann Weihnachten kommen.

      Gruß
      Dirk