fopen als Text ausgeben
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ausgeben
bearbeiten
code
dank
datei
ding
dutzend
grund
http
inhalt
paket
quelle
sagen
schleife
server
test
text
unsinn
url
zeile
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich würde das ganze mit file_get_contents machen, da die meisten php.ini's das externe fopen verbieten. Also so:
$datei = file_get_contents("http://.....de");
Und in $datei ist dann der Quelltext drinn. -
christian1603 schrieb:
Hallo LC,
ich duchsuche so eine HP
<?php @$datei = fopen("http://............de","r") or die("Kann Seite nicht öffnen!"); echo fread($datei,1000); ?>
So jetzt will ich den Quelltext als Text ausgeben wie kann man das machen?
Danke Schonmal
Dazu musst du machen:
echo htmlentities(fread($datei, 1000));
LG cookies -
yo mey! hallöchen
ich musste mal dringend in die tastatur greifen! grund sind die unzählige postings in den unterschiedlichsten foren (ja, auch hier und dort bei lima-city!) zum thema 'remote site einlesen und ausgeben/bearbeiten'! man glaubt es kaum, die meisten sind 'file_get_contents'-fetischisten. weil ich seit jahren web scraping betreibe muss ich sagen: 'jo schmarrn!'. daher hier mal ein sehr kurzes gegenbeispiel und justament mit fopen/fread (man könnte dafür gleich 2 dutzend andere lösungen bringen, allesamt funktionierend, nur halt anders :o)
@christian1603
1. '@' zu unterdrückung von fehlermeldungen &c. ist eine sehr schlechte methode.<?php @$datei = fopen("http://............de","r") or die("Kann Seite nicht öffnen!"); echo fread($datei,1000); ?>
2. 'or die' ist seit geraumer zeit ein securiti issue, daher: finger weg!
3. dein code funktioniert nur dann, wenn die seite kleiner-gleich 1000B ist.
nur so nebenbei 'fopen als Text ausgeben' ist eine sehr saloppe ausdrucksweisel das ginge einfach so:
fopen seinerseits gibt keinen text aus. und auch nicht fread.echo "fopen"; // :o))))
@telelo
Ich würde das ganze mit file_get_contents machen, da die meisten php.ini's das externe fopen verbieten.
1. file_get_contents ist genau so gut oder schlecht wie fopen.
2. mit file_get_contents machen - kontra - da die meisten php.ini's das externe fopen verbieten: hast du über den sinn diser gegenüberstellung schon mal nachgedacht? tue das! (kleine nachdenkhilfe: wenn ein hoster eine seite ausliefert, nachträglich kann er mich daran nicht hindern, die seite zu lesen/bearbeiten. was geht mich sein php.ini was an? wir sind doch remote!!?? oder??)
an sonsten nichts gegen deine lösung, (auch) sie kann ja gehen :o)
@christian1603
dein code angewandt an die new york times. siehe dazu test-1
da sieht man genau den anfang fragmentweise. grund ist: der server liefert nur pakete aus. nach dem ende des ersten pakets denkt sich fread(), dass es nun vorbei sei und hört auf weiter zu schürfen. ohne htmlentities siehst du die seite gar nicht! mit einer while-schleife kann man sie aber mit der restlichen seite (paketweise) bis zum EOF füttern.@$datei = fopen ("http://nyt.com/","r") or die ("Kann Seite nicht öffnen!"); echo htmlentities (fread ($datei,1000));
und so geht es: test-2
code dazu:
<?php $fn = "http://nyt.com/"; $m = "r"; $doc = null; $cnt = 0; $pos = 0; // für echo in der while-schleife //$len = 0; if ( false !== ($fh = fopen ($fn, $m)) ) { while (!feof ($fh)) { $doc .= fread ($fh, 8192); // veranschaulicht die vom server ankommende pakete //echo "<h5>".$len += strlen ($doc)."</h5>"; } } else { $doc .= "Kann Seite nicht öffnen!"; } exit (htmlentities ($doc)); ?>
zu der frage 1000? oder (wie bei mir) 8192? die pakete, die server so von sich geben sind alles nur nicht gleich. daher ist es ziemlich egal. je grösser natürlich desto besser. warum? stell dir vor, du holst die daten byteweise vom server :o)
==== edit ====
ich habe im code noch was hinterher stehen, daher bei mir die ganze texausgabe im exit. du musst dir das so umtun, wie es dir passt, sonnst bleibt da stecken!
und noch eine bitte:sollte jemand eine adresse haben, wo das 2. beispiel versagt, posting oder pn wäre nett.
Beitrag zuletzt geändert: 27.11.2009 7:57:11 von czibere -
@czibere:
óÒ?!?
Warum sollte ich einen dreißigzeiligen Code schreiben, wenn ich mit einer Zeile file_get_contents() locker auskomme?
Weiterhin: Wo (Quelle?) hast du solch einen Unsinn gelesen, dass "or die()" ein "security issue" wäre? Eine ganz gewöhnliche logische Operation, mehr nicht.
Zum Thema Verbot von fopen(): telelo meinte, dass allow_url_fopen in der php.ini auf Off gesetzt sein kann. (Was es auch sehr oft ist.) Der Anbieter des Inhalts, kann sich natürlich nicht dagegen schützen.
Und nochmal: Code ist gut, wenn er einfach ist oder wenn er schnell ist. Deiner ist glaube ich keins von beidem. -
@nikic
... wenn ich mit einer Zeile file_get_contents() ...
ich lese so in einigen foren und muss sagen, es gibt offensichtlich 1-2 leute, die auch damit mächtige probleme haben. freut mich, dass auch du (mit meiner wenigkeit) nicht in diese gruppe gehörst. (jetzt lassen wir mal die ca. 2 dutzend andere lösungen links liegen. und derer sinn auch :o)
... Wo (Quelle?) hast du solch einen Unsinn ...
quelle_1 - Chris Shiflett: Essential PHP Security, O´Reilly, ISBN 0-596-00656-x ... + seine webseite ... danke für deine warnung, ich werde jetzt von dem vorderlappenamputirten das geld für das teure buch zurückverlangen.
quelle_2 - php.net bestätigt aber leider den vorderlappenamputierten, so werde ich das buch doch liber in ehren halten :o)
quelle_3 - www ... eventuell besser googlen? stichworte 'php' 'security' (von mir aus auch) 'sicherheit' ... 'php bugs' ... was weiss ich ... lass dir noch was einfallen.
... dass allow_url_fopen in der php.ini auf Off gesetzt sein kann. ...
weisst wenigstens du, von wessen php.ini du sprichst (nochmals: remote! site). für mich hat eine einzige php.ini datei relevanz: meine! und sonst keine ;o) [remote site scraping hat wenig ... nein, eigentlich gar nichts mit 'homepage bei meinem provider' o. so zu tun. oder stehe ich da am logischen schlauch?]
Und nochmal: Code ist gut, wenn er einfach ist oder wenn er schnell ist. Deiner ist glaube ich keins von beidem.
'einfach' hängt von der denkweise ab. arbeitgeber haben es gern, wenn programmierer 'einfach' arbeiten. dann haben die sich aber auch schon austauschbar gemacht. (arbeitgebern wäre es ohnehin lieber primaten in der firma zu haben: statt 1xgehalt im monat 2xbananenschale am tag und anketten ... geht schon!) ich programmiere nicht dafür dass man es versteht, sondern, dass das ding unter möglichst vielen umständen funktioniert. was dahinter steckt kann jede sich holen - in dem er was dazulernt (ich mache es ständig, kann nur weiterempfehlen).
'schnell', da fallen mir nur hochintelligente sprüche ein wie ... 'der weg ist das ziel' oder 'ich weiss zwar nicht wo ich hinwill, aber ich möchte sofort dort sein' ...
daher meine meinung: du hast recht! es ist nicht schlecht, wenn der code einfach und schnell ist, ABER, wenn es nicht anders möglich, dann soll er unverständlich und langsam das ding erledigen (trotz dass alle sagen NEIN das ist nicht möglich).
du kannst meinen code aber gerne kürzen und schneller machen, dass er verständlicher wird. ist 'open source' ;o)
PS.: mein beispiel war nicht als zwingender vorschlag gebracht. 30 zeilig war es auch nicht. zu erinnerung, auf den effektiv arbeitenden code gekürzt:
das ist mir aber nur 3-zeilig.if ( false !== ($fh = fopen ($fn, $m)) ) { while (!feof ($fh)) {$doc .= fread ($fh, 8192);} } else {$doc .= "Kann Seite nicht öffnen!";}
-
Wenns um einfachheit geht:
<?php echo htmlentities(file_get_contents("https://www.lima-city.de")); ?>
Übrigens kann es uns vollkommen egal sein, wie seine php.ini aussieht, die meisten Hoster, und ich denke mal seine Seite soll nicht auf dem Localhost bleiben, haben allow_url_fopen nunmal aus. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage