Bei externen Zugriff hängt sich website auf ...
F.woell
- php
Hallo,
Meine php programmierte website ruft unter anderem dynamische Inhalte durch einen include Befehl von extern auf und präsentiert diese.
Nun kommt es an und ab vor, dass der Fremdserver abstürtzt.
Leider baut sich dann auch meine Seite mit eigenem Inhalt nicht mehr auf, obwohl mein Server und meine DB laufen.
Wenn man während des "ewigen ladens" auf abbrechen klickt, wird meine Seite soweit allerdings angezeigt, bis auf den Teil, deren Inhalt ich von extern holen will.
Es sieht also so aus, dass sich meine Tabelle scheinbar gerne komplett aufbauen will und erst dann angezeigt wird, wenn auch das Schlußtag eingelesen wird. Auf dieses wartet aber mein Browser ewig, da ja der Zuriffsversuch auf extern läuft und eben nicht beantwortet wird.
Wie kann man dies Problem umgehen?
Durch eine Realisierung von iframe?
Wäre um Hinweise sehr dankbar...
Hallo,
wer lädt denn was?
So, wie Du das beschreibst, wird der Traffic ja voll über Deinen Server geleitet und nicht nur die Resource-Identifier aufgebaut und an den Browser geschickt.
Enthalten die externen Inhalte denn PHP-Code? Nur dann ist include eigentlich gerechtfertigt. In allen anderen Fällen kann man fopen und fread sicher eine bessere Erfolgskontrolle durchführen. Die Datei einfach in eine Variable einlesen. Wenn das nicht klappt, gibt es ja eine Fehlernummer zur Auswertung. Dann kann man es in einer Schleife entweder nochmal probieren, oder abbrechen.
Die Variable dann einfach ausgeben...
Grüße
Tom
Hallo Thomas (Tom),
Vielen Dank für Deine Antwort auf selfhtml.
Ich bin zusehr Anfänger als dass ich auf diesem Gebiet voll durchsteige ...
Hmmmmm,
also, die refernzierte Quelle enthält php code -> deswegen das include...
Meine Seite ist in etwa so aufgebaut:
<head>
</head>
<body>
<table>
<tr><td> diverse weitere Tabellen mit eigenem Inhalt </td></tr><tr> <td> <table extern ..... (durch php include ausgegeben)</table extern> </td></tr> </table> </body> . . .
Ich meinte mal gelesen zu haben, dass der Browser erst die komplette Tabelle laden muss (also auch die Inhalte) bevor er sie ausgibt...
Wenn dem so ist, dann wäre verständlich, dass er bei der include -Anweisung erst auf das feedback warten muss, bevor er mit der Darstellung fortfährt...
Deswegen würde ich gerne den Bereich, den das "include" betrifft 'autonom' gestalten, damit die Seite angezeigt wird, egal was 'im autonomen Bereich' passiert...
OK, jetzt hab ich mich gänzlich geoutet, völlig Laie, aber vielleicht doch verständlich?
Danke Dir, für Deine Unterstützung....
Gruß, Florian
Hi Florian,
dass Du noch etwas mehr Anfänger bist, als ich oder Andere hier, ist denke ich, der Sinn des Forums, also keine Schande. Ich denke, dass hier niemand von sich sagt, dass er/sie alles weiß.
also, die refernzierte Quelle enthält php code -> deswegen das include...
Das dachte ich mir schon. Ist aber nicht ungefährlich, php-Code von außen zuzuladen. Das solltest Du lassen. Da könnte man Dir ja alles auf Deinen Server schieben und Du wärst nachher auch noch dafür verantwortlich. Um welche wichtigen Dinge handelt es sich denn, dass Du sie nicht auf Deinem Server speichern kannst und nur z.B. externe Dateizugriffe machst auf Code der NICHT AUSGEFÜHRT sondern bestenfalls angezeigt wird?
Meine Seite ist in etwa so aufgebaut:
<head>
</head>
<body>
<table>
<tr><td> diverse weitere Tabellen mit eigenem Inhalt </td></tr><tr> <td> <table extern ..... (durch php include ausgegeben)</table extern> </td></tr> </table> </body> . . .
Mmmh, das gibt mir wieder zu denken. Also rufst Du nun auf einem fremden Server eine php-Datei auf? Dann wird die ja auf dem externen Server ausgeführt und Du erhältst sowieso nur das HTML-Ergebnis geliefert. In diesem Fall würde ich erst Recht auf fopen() und fread() ausweichen, da man ja nie weiß, ob der externe Server nicht doch mal php liefert anstelle von HTML.
Du solltest untersuchen, ob Dein Script beim Includen hängen bleibt, oder ob der Browser des Client beim Anzeigen hängen bleibt.
Stell die include-Passage mal um auf
$url="http://www.blabla.de/externe_Datei.php";
$fh=fopen($url,"r");
if ($fh)
{
$i=0;
while ($tabelle.=fread($fh,512))
{
$i++;
}
fclose($fh);
}
echo "es wurden $i erfolgreiche Leseversuche durhgeführt<br />;
echo $tabelle;
Außerdem sollte sichergetellt werden, dass die gelieferten Daten nicht nochmals <html><head><body>-tags enthalten. Die hast Du ja schon in Deinem Dokument angelegt, oder?
Ich meinte mal gelesen zu haben, dass der Browser erst die komplette Tabelle laden muss (also auch die Inhalte) bevor er sie ausgibt...
Das hängt vom Browser ab. M$ kann es meistens auch ohne Abschlußtag.
Das Probelem scheint mir eher auf dem Server zu liegen, dass der seine Buffers nicht an den Browser absendet, bevor das Scriot nicht zuende ist.
Zum Testen könnte man da mal ein flush(); dazwischensetzen.
Danke Dir, für Deine Unterstützung....
Wenns hilft, keine Ursache
Liebe Grüße aus http://www.braunschweig.de
Tom