Quelltext von anderer HTML-Seite speichern und auswerten
Dirk
- php
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
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
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
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
Hallo Tom,
also die Länge des Strings $data ist 2301 Bytes. Jetzt fragt sich nur, wo der Rest vom Quelltext ist. :-)
Gruß
Dirk
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
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
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
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
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
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
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