Text aus externer Datei auslesen
Mathew
- php
0 Tobias K.0 dimde0 Alexander Foken0 dimde
0 Tobias K.
0 dimde0 Thomas Schmieder
Hallo,
wie kann ich mit Hilfe von php Text (HTML-Code) aus einer externen Datei einlesen und in einem HTML-Dokument darstellen? Das kann ich natürlich leicht nachlesen, aber ich suche eher etwas fertiges, irgendwelche Scripte, mit denen man das bewerkstelligen kann. Kann mir da jemand behilflich sein?
mr
Hallo Mathew,
wie kann ich mit Hilfe von php Text (HTML-Code) aus einer externen Datei einlesen und in einem HTML-Dokument darstellen?
was willt du machen? den html-code einer Datei mit einer php-Datei ausgeben? vielleicht hilft dir das:
$filename = "datei.html";
$fd = fopen ($filename, "r"); //http://www.php.net/manual/de/function.fopen.php
$contents = fread ($fd, filesize($filename)); //http://www.php.net/manual/de/function.fread.php
fclose ($fd); //http://www.php.net/manual/de/function.fclose.php
echo htmlspecialchars($contents); //http://www.php.net/manual/de/function.htmlspecialchars.php
ungetestet :-) - oder meinst du was anderes?
Grüße aus Nürnberg
Tobias
Hallo Tobias K.,
$filename = "datei.html";
$fd = fopen ($filename, "r"); //http://www.php.net/manual/de/function.fopen.php
$contents = fread ($fd, filesize($filename)); //http://www.php.net/manual/de/function.fread.php
fclose ($fd); //http://www.php.net/manual/de/function.fclose.php
echo htmlspecialchars($contents); //http://www.php.net/manual/de/function.htmlspecialchars.php
wie wär's mit echo htmlspecialchars(implode("", file($filename))); ? ;)
Gruß,
dimde
Moin Moin !
wie wär's mit echo htmlspecialchars(implode("", file($filename))); ? ;)
Du meinst, weil es genau so wenig auf Fehler prüft, aber dafür in eine Zeile paßt ? *SCNR*
Alexander
Hallo Alexander Foken,
wie wär's mit echo htmlspecialchars(implode("", file($filename))); ? ;)
Du meinst, weil es genau so wenig auf Fehler prüft, aber dafür in eine Zeile paßt ? *SCNR*
Jep, sieht viel eleganter aus, wenn das dann in ner Error Log steht :)
Gruß,
dimde
Hallo dimde,
wie wär's mit echo htmlspecialchars(implode("", file($filename))); ? ;)
das geht natürlich auch, nur muss man vor beide Beispiele noch ein <pre> (bzw. dannach halt </pre>) schreiben, sonst sieht das ganze ziemlich wüst aus :-)
Grüße aus Nürnberg
Tobias
Hallo Mathew,
wie kann ich mit Hilfe von php Text (HTML-Code) aus einer externen Datei einlesen und in einem HTML-Dokument darstellen? Das kann ich natürlich leicht nachlesen, aber ich suche eher etwas fertiges, irgendwelche Scripte, mit denen man das bewerkstelligen kann. Kann mir da jemand behilflich sein?
dazu gibt es eine eigene PHP Funktion. Wie sie heißt und wie man sie
verwendet kannst du - wie du ja selbst sagst - leicht nachlesen
(Kleiner Tipp: Du willst Text _einfügen_).
Beachte aber auch die zahlreichen Sicherheitsrisiken die durch
allzu leichtsinnige Verwendung dieser Funktion entstehen können
und wie man sie umgehen kann[1].
[1] Suche dazu hier im Archiv und lies dir die Kommentare zu dieser
Funktion im PHP Manual, sowie das Kapitel "Security" durch.
Gruß,
dimde
Hallo Tobias,
welch Zufall. Das habe ich gerade ausprobiert:
<?PHP #### getpage.php ####
$datei = "http://192.168.101.1/seminare/index.html";
$fh = fopen($datei,"r");
if(!$fh) die("hat nicht geklappt");
$site="";
$i=0;
while (($block=fread($fh,512)) and ($i++ < 20)) // was ist hier mit der Größenangabe ?
{
$site.=$block;
}
fclose($fh);
echo $site;
?>
Das muss natürlich nun noch weiterentwickelt werden. Denn was ist, wenn dort ein Frameset drinsteht?
Das will ich gerade noch ersetzen. Und außerdem sollte man der Funktion dann auch noch einen Parameter übergeben könne, um jede beliebige EXTERNE Seite lesen zu können. Die Internen sollte man tunlichst unterbinden. Sonst hat man eine schöne Sicherheitslücke.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hi Tom,
Mail bekommen? ;-)
welch Zufall. Das habe ich gerade ausprobiert:
<?PHP #### getpage.php ####
$datei = "http://192.168.101.1/seminare/index.html";
$fh = fopen($datei,"r");
if(!$fh) die("hat nicht geklappt");$site="";
$i=0;
while (($block=fread($fh,512)) and ($i++ < 20)) // was ist hier mit der Größenangabe ?
{
$site.=$block;
}fclose($fh);
echo $site;
?>Das muss natürlich nun noch weiterentwickelt werden. Denn was ist, wenn dort ein Frameset drinsteht?
Das will ich gerade noch ersetzen. Und außerdem sollte man der Funktion dann auch noch einen Parameter übergeben könne, um jede beliebige EXTERNE Seite lesen zu können. Die Internen sollte man tunlichst unterbinden. Sonst hat man eine schöne Sicherheitslücke.
Warum? Solange man die Dateien nur Lesen kann, kann doch nichts passieren. Es sei denn, du machst in deinem Script Dummheiten...
Fabian
Hallo Fabian,
Das will ich gerade noch ersetzen. Und außerdem sollte man der Funktion dann auch noch einen Parameter übergeben könne, um jede beliebige EXTERNE Seite lesen zu können. Die Internen sollte man tunlichst unterbinden. Sonst hat man eine schöne Sicherheitslücke.
Warum? Solange man die Dateien nur Lesen kann, kann doch nichts passieren. Es sei denn, du machst in deinem Script Dummheiten...
Habe ich da eben verkehrt gedacht? wenn ich getpage.php?page=/etc/... schreibe, dann könntest Du Dir damit jede Datei auf dem Server anzeigen lassen, auf die das Script Zugriff hat. Das muss man unterbinden. Oder?
Liebe Grüße aus http://www.braunschweig.de
Tom
Hi
Das will ich gerade noch ersetzen. Und außerdem sollte man der Funktion dann auch noch einen Parameter übergeben könne, um jede beliebige EXTERNE Seite lesen zu können. Die Internen sollte man tunlichst unterbinden. Sonst hat man eine schöne Sicherheitslücke.
Warum? Solange man die Dateien nur Lesen kann, kann doch nichts passieren. Es sei denn, du machst in deinem Script Dummheiten...
Habe ich da eben verkehrt gedacht? wenn ich getpage.php?page=/etc/... schreibe, dann könntest Du Dir damit jede Datei auf dem Server anzeigen lassen, auf die das Script Zugriff hat. Das muss man unterbinden. Oder?
Nö, ich greife immer über "http://".$_GET['page'] zu. Da kommt der arme Parameter an keine Systemdaten ran. Und selbst wenn: Auf /etc/, /lib/, /bin/ etc. hat das Script (bei mir) eh keine Rechte, was soll also passieren?
Fabian
Hi Fabian,
Nö, ich greife immer über "http://".$_GET['page'] zu. Da kommt der arme Parameter an keine Systemdaten ran. Und selbst wenn: Auf /etc/, /lib/, /bin/ etc. hat das Script (bei mir) eh keine Rechte, was soll also passieren?
Könntest du Dein Script bitte posten?
mr
Hi
Nö, ich greife immer über "http://".$_GET['page'] zu. Da kommt der arme Parameter an keine Systemdaten ran. Und selbst wenn: Auf /etc/, /lib/, /bin/ etc. hat das Script (bei mir) eh keine Rechte, was soll also passieren?
Könntest du Dein Script bitte posten?
--
<?PHP #### js_test.php ####
$fh = fopen("http://".$_GET['page'],"r");
if(!$fh)die("Seite nicht erreichbar (oder sicher genug, nicht auslesbar zu sein...)!");
$site = fread($fh,800000); // Ich nehme an, dass 800000 groß genug ist? ;-)
fclose($fh);
echo $site;
?>
--
Fabian
Hi
<?PHP #### js_test.php ####
$fh = fopen("http://".$_GET['page'],"r");
if(!$fh)die("Seite nicht erreichbar (oder sicher genug, nicht auslesbar zu sein...)!");
$site = fread($fh,800000); // Ich nehme an, dass 800000 groß genug ist? ;-)
fclose($fh);echo $site;
?>
Hat dieses Script jetzt noch Sicherheitslücken?
mr
Hi
»»[...]
Hat dieses Script jetzt noch Sicherheitslücken?
Nur, wenn du es wieder änderst ;-)
Nein, im Ernst: Das Script ist jetzt so angelegt, dass es eher einen Fehler gibt, als das vitale Dateien ausgelesen werden können, zumindest nicht auf dem lokalen System. Sicherheitslücken in externen Scripten schließt das natürlich nicht...
Fabian
Hi
<?PHP #### js_test.php ####
$fh = fopen("http://".$_GET['page'],"r");
Was muss ich hier verändern, wenn ich z.B. die Seite "www.website.de/dir/index1.htm" auslesen möchte?
mr
Hallo Mathew,
<?PHP #### js_test.php ####
$fh = fopen("http://".$_GET['page'],"r");
Was muss ich hier verändern, wenn ich z.B. die Seite "www.website.de/dir/index1.htm" auslesen möchte?
Du musst das script nut aufrufen
js_test.php?page=www.website.de/dir/index1.htm
Ich bin mir aber im Moment nicht sicher, ob die slashes nicht ersetzt werden müssen gegen %2F
Dann müsstest Du in dein Frame aufnehmen:
<frame src="js_test.php?page=www.website.de%2Fdie%2Findex1.htm">
So müsste das dann klappen, wenn das Script im Verzeichnis vom Frameset liegt.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo Thomas,
Das will ich gerade noch ersetzen. Und außerdem sollte man der
Funktion dann auch noch einen Parameter übergeben könne, um jede
beliebige EXTERNE Seite lesen zu können. Die Internen sollte man
tunlichst unterbinden. Sonst hat man eine schöne Sicherheitslücke.
Was meinst du hier genau mit externen und internen Dateien (innerhalb/außerhalb der Domain?)?
mr
Hallo Mathew,
Was meinst du hier genau mit externen und internen Dateien (innerhalb/außerhalb der Domain?)?
Ja, alle Dateien, die auf DEinem Server leigen, lassen sich ja ohne http:// erreichen und damit könnte man dann, wenn das Script der in $_GET["page"] übergebenen Dateinamen einfach so übernehmen würde, alle Dateien auf Deinem Server aufmachen, auf die das Script (der wwwrun) Zugriff haben. Das dürften mehr sein, als Die lieb ist.
Liebe Grüße aus http://www.braunschweig.de
Tom