Mysteriöses Phänomen, Quelltext wird verschluckt
Ron
- webserver
Hallo allesamt,
Seit Tagen komme ich nicht hinter das Geheimnis, was da los ist und hoffe das mir hier jemand auf die Sprünge helfen kann.
Ich habe 2 CMS-Projekte von einem russischen Server auf einen deutschen Server und dann wieder weiter auf einen weiteren russischen Server gespielt. Die Daten der Datenbanken ebenso. Hat alles soweit funktioniert, bis auf das ich Problem mit dem Zeichensatz hatte. Das habe ich aber in den Griff bekommen. Ist jetzt UTF-8.
Außer dem Zeichensatzproblem hatte und habe ich noch folgendes Problem (bei beiden Projekten):
Es wird zu 90% der letzte Teil des Quelltextes verschluckt.
Auf den anderen Servern hatte ich das Problem nicht.
Ich hatte so etwas überhaupt noch nicht.
Immerwieder zwischendurch wird er vollständig übermittelt.
Wenn ich "Ansicht Seitenquelltext" aufrufe, kann es sein, das ich den Code vollständig angezeigt bekomme, aber beim 2. mal "Ansicht Seitenquelltext" (ohne das ich die Seite nochmal aktualisiere) der Quelltext doch nicht vollständig da ist.
Der Quelltext bricht auch jedesmal genau an der gleichen Stelle ab. Also immer bei bestimmten Seiten, an genau den gleichen Stellen. (Zwischen 20 und 200 Zeichen)
Ab einer bestimmten Menge Artikel (CMS) die auf einer Seite dargestellt werden, verschwindet der Fehler.
Ich glaube dass das irgenwie mit der Zeichenkodierung zu tun hat.
Hat das jemand schon mal erlebt?
Weiß vielleicht jemand woran das liegen könnte?
Beispiel: (weiterleitung, damit kein Kundenlink hier steht)
Über Hilfe würd ich mich freuen...
Gruß Ron
Hat das jemand schon mal erlebt?
Weiß vielleicht jemand woran das liegen könnte?Beispiel: (weiterleitung, damit kein Kundenlink hier steht)
Ich vermute, dass an der Stelle, wo der Quelltext abbricht, ein Scriptfehler ist. bei PHP heisst ja noch lange nicht, dass, was auf Server A läuft, auch auf Server B richtig ist.
mfg Beat
Hat das jemand schon mal erlebt?
Weiß vielleicht jemand woran das liegen könnte?Beispiel: (weiterleitung, damit kein Kundenlink hier steht)
Ich vermute, dass an der Stelle, wo der Quelltext abbricht, ein Scriptfehler ist. bei PHP heisst ja noch lange nicht, dass, was auf Server A läuft, auch auf Server B richtig ist.
mfg Beat
Hallo, danke für deine Antwort...
Leider kann es das nicht sein.
1. Aufgrund meiner Beschreibungen aus dem ersten Post.
2. Weil der Quelltext mitten im HTML-Bereich abbricht.
Z.B. im Image-Tag, Link- oder Kommentar-Tag
3. Weil der Abbruch durch hinzufügen oder entfernen von Inhalt verschoben werden kann.
Die Seite kommt ja auch immer wieder mal richtig an.
Auf der genannten Seite Seite
ist der Abbruch an folgender Stelle:
Hier der vollständige Code bis Seiten-Ende (Wenn alles gut geht):
<div id="copyright"><a href="index.php?rubric=Brand+Contact" class="copyright">Beispieltext</a>
</div>
<!-- end of RUBRIC/_local_footer.php -->
<!-- start of _cfg/global_footer.php.dist -->
<div id="globalfooter" style="position:absolute;left:0px;top:0px;">
<a href="/consulting/_admin/index.php?rubric=7" target="_blank"><img src="/consulting/_images/transparent.gif" style="width: 1em; height: 1em; border: 0;" /></a></div>
<!-- end of _cfg/global_footer.php.dist -->
</body>
</html>
Un hier die Stelle des Abbruchs (Wenn er Quellcode verschwindet):
<div id="copyright"><a href="index.php?rubric=Brand+Contact" class="copyright">Beispieltext</a>
</div>
<!-- end of RUBRIC/_local_footer.php -->
<!-- start of _cfg/global_footer.php.dist --
Es fehlt das letzte Zeichen des HTML-Kommentars, so das der Browser es nicht als Kommentar erkennt und den Text auf der Seite darstellt.
Somit ist es gut zu sehen, wenn der Quelltext nicht vollständig ist.
Gruß Ron
Huhu.
Du(PHP, das Script, was auch immer) gibst womöglich die falsche Content-Length aus. Der Browser hält sich gemeinerweise dran.
Von PHP habe ich keinen Plan, aber Kodierungsthemen sind eine mögliche Ursache...
Guck mal, ob das Problem noch auftritt, wennde mal keine Content-Length ausgibst(Wie gesagt: keine Ahnung, wie man das in PHP abstellt).
Grüße
Hi, vielen Dank ür deine Antwort.
Genau sowas in der Richtung denke ich auch.
PHP in diesem Fall ist richtig.
Die Content-Length wird z.B. mit Firebug ausgegeben.
Aber das man sie ändern könnte wüsste ich auch nicht.
Hab jetzt mal gegoogelt, aber zum Thema "Content-Length ändern" finde ich nichts. Scheint nur im Zusammenhang mit Datei-Downloads (PDF/ZIP/MP3) etwas zu tun zu haben.
Ich schätze mal eher das ich dem Server wieder die richtige Content-Length beibringen muss. Ich habe auch schon sonderbare Zeichen gesucht, die vielleicht verantwortlich sind, finde aber keine...
Gruß Ron
Huhu.
Du(PHP, das Script, was auch immer) gibst womöglich die falsche Content-Length aus. Der Browser hält sich gemeinerweise dran.
Von PHP habe ich keinen Plan, aber Kodierungsthemen sind eine mögliche Ursache...
Guck mal, ob das Problem noch auftritt, wennde mal keine Content-Length ausgibst(Wie gesagt: keine Ahnung, wie man das in PHP abstellt).
Grüße
Hoi.
Das mim Googlen bitte nochmal üben ;-) Das hier schaut gut aus:
header("Content-Length: " . filesize($file));
Setze hier mal nen beliebig hohen Wert ein und betrachte das Ergebnis.
Möglich wäre z.B. folgendes. Die derzeit ausgebene Content-Length (PHP macht doch sehr viel automatisch, so vermutlich auch dieses. Vielleicht aber auch das CMS...) spiegelt die Anzahl der Zeichen wieder, der Browser will aber wissen, wieviele Bytes er bekommt...
Alternative:
Mach das, was Du da an Kodierungen umgestellt hast, wieder rückgängig. Evtl. kommst Du so schneller zum Ziel...
Grüße
Hi,
Das mim Googlen bitte nochmal üben ;-) Das hier schaut gut aus:
header("Content-Length: " . filesize($file));
Setze hier mal nen beliebig hohen Wert ein und betrachte das Ergebnis.
Hmmm...
Ich hab das mal eingesetzt und für $file eine hohe Zahl eingegeben.
Passiert aber nix.
Ich habe jetzt auch nochmal gegoogelt und so wie ich das sehe, setzt man für $File den Pfad zu einer bestimmten Datei (Z.B. ZIP) ein.
Ich denke, das verwendet man, wenn man zum Beispiel Fortschrittsanzeigebalken bei Downloads erzeugen will.
So habe ich das jedenfalls verstanden.
Wäre ja jetzt auch zu einfach gewesen ;)
Möglich wäre z.B. folgendes. Die derzeit ausgebene Content-Length (PHP macht doch sehr viel automatisch, so vermutlich auch dieses. Vielleicht aber auch das CMS...) spiegelt die Anzahl der Zeichen wieder, der Browser will aber wissen, wieviele Bytes er bekommt...
Alternative:
Mach das, was Du da an Kodierungen umgestellt hast, wieder rückgängig. Evtl. kommst Du so schneller zum Ziel...
Der Fehler war schon vor der Kodierungsumstellung da.
Jedoch kann ich mir vorstellen das durch die Umzüge der Datenbankinhalte etwas schief gelaufen ist. Andererseits werden die Zeichen fast alle richtig dargestellt und die die nicht, habe ich in der DB-Tabelle wieder neu angegeben... Vielleicht stecken aber noch Zeichen drin, die das ganze durcheinanderbringen?
Ich sehe auch in Firebug, das die Beispieldatei wenn Korrekt eine Content-length von: 5572 und wenn falsch: 5266 also 306 Zeichen unterschied...
was ja eigentlich nicht für nur ein paar Zeichen falsch spricht.
Nochmal alles von vorne, wäre schwierig, da ich mittlerweile auch einige Dinge geändert habe, aber eigentlich nichts was ich mir vorstellen könnte was das verursacht haben könnte... Die Seiten sind auf CMS-Basis mit Text und Bildern als Inhalt. Nichts besonderes....
Gruß Ron
Grüße
Moin.
Ich habe jetzt auch nochmal gegoogelt und so wie ich das sehe, setzt man für $File den Pfad zu einer bestimmten Datei (Z.B. ZIP) ein.
Ich denke, das verwendet man, wenn man zum Beispiel Fortschrittsanzeigebalken bei Downloads erzeugen will.
So habe ich das jedenfalls verstanden.
Schon wieder einer, der in Dateien und nicht in Ressourcen denkt ;-) Aufm Dateiexplorer ist das richtig, bei nem Webserver nicht.
Du musst den Content-Length nicht zwangsläufig ausgeben. Lieber keinen als nen falschen.
Insgesamt scheinen Dir ein paar Grundlagen zu fehlen... Frag vielleicht besser einen PHP Coder, der sich die Situaiton auf dem Server mal direkt anschaut.
Grüße
Moin.
Ich habe jetzt auch nochmal gegoogelt und so wie ich das sehe, setzt man für $File den Pfad zu einer bestimmten Datei (Z.B. ZIP) ein.
Ich denke, das verwendet man, wenn man zum Beispiel Fortschrittsanzeigebalken bei Downloads erzeugen will.
So habe ich das jedenfalls verstanden.
Schon wieder einer, der in Dateien und nicht in Ressourcen denkt ;-) Aufm Dateiexplorer ist das richtig, bei nem Webserver nicht.
Ja, kann sein das ich das nicht richtig verstehe.
Aber, das was du vorgeschlagen hattest, hat nicht funktioniert.
Und ich konnte trotz ausgiebiger Recherche nichts, auch nur annähernd, zu deinem Vorschlag finden. Da ging es immer nur um Datidownload und Abfrage einer Dateigrösse, aber nicht der PHP-Datei in der die Header-Funktion steht.
Du musst den Content-Length nicht zwangsläufig ausgeben. Lieber keinen als nen falschen.
Der Server gibt den ja aus und nicht ich?
Und wie unterdrücke ich den?
Insgesamt scheinen Dir ein paar Grundlagen zu fehlen... Frag vielleicht besser einen PHP Coder, der sich die Situaiton auf dem Server mal direkt anschaut.
Grüße
Hast du vielleicht nen Link wo das Thema behandelt wird, wie du es meinst?
PHP-Coder habe ich hier keinen, ausser mir, dem an manchen Stellen wohl wissen fehlt. deshalb muss ich hier fragen...
Gruß Ron
Heyho.
Angemeldete Benutzer haben hier die Möglichkeit, den Thread Titel zu ändern. Das wäre für meine Begriffe jetzt angebracht, um einen Zusatz á la "PHP Profi gesucht" einzubauen. Leider bin ich nicht registriert :-(
Alternativ könntest Du einen neuen Post aufmachen, der wird dann aber in kurzer Zeit als Doppelposting gesperrt werden :-(
Der Server gibt den ja aus und nicht ich?
Das stimmt so nicht. Wenn wir sagen: Ich habe einen Apache am laufen und fordere die statische Ressource test.gif / test.html an, dann ja. Dann gibt Apache den Content-Length Header aus.
Bei einer dynamischen Ausgabe hingegen, also z.B. durch dein PHP Script sieht das womöglich schon anders aus. Ich bin Perlianer, da liegt es in meiner Verantwortung die Angabe korrekt zu bestimmen und auszugeben.
Als "ich mach alles automatisch Sprache" ist das bei PHP womöglich anders. Evtl. gibt es hier per Default registrierte Handler, die Dir den Job abnehmen. ABER: Ich habe keinen Plan von PHP :-(
Genauso wäre es möglich, dass das von Dir verwendete CMS einen Bug hat, und als Content-Length schlicht die Anzahl der Zeichen sendet und nicht, wie es sich gehört, den Bytecount. Da Du ja nun UTF8 verwendest, kracht es.
Aber, das was du vorgeschlagen hattest, hat nicht funktioniert.
Hast Du, z.B. mit dem von Dir erwähntem Firebug, sicher verifiziert, ob durch die Anpassung des PHP Scripts auch tatsächlich ein größerer Wert für den Content-Length Header beim Client ankommt?
Grüße
Hi,
Heyho.
Angemeldete Benutzer haben hier die Möglichkeit, den Thread Titel zu ändern. Das wäre für meine Begriffe jetzt angebracht, um einen Zusatz á la "PHP Profi gesucht" einzubauen. Leider bin ich nicht registriert :-(
Alternativ könntest Du einen neuen Post aufmachen, der wird dann aber in kurzer Zeit als Doppelposting gesperrt werden :-(
Dachte ich auch schon drüber nach, einen Threat auf zumachen. Dann werde ich aber erst mal den Titel ändern. Denn ich befürchte auch das das als Crossposting gesehen wird. Kann ich ja später noch machen. Danke dir aber auch für deine Mühen...
Für alle die hier neu lesen!
Problem ist, das meine Content-Lenght bei einem Seitenaufruf zu 90% zu klein ist und deshalb das letzte Stück vom Quelltext fehlt. Seite ist auf einem russischen Server, PHP-CMS, Zeichenkodirung UTF-8, Datenbnak wurde über 2 Server hinweg ex- und importiert. Nach anfänglichen Problemen funktioniert die Ausgabe der Sonderzeichen mit UTF-8. Doch eben noch dieses Problem mit dem Content-Lenght besteht. War übrigens schon vor dem Kodierungswechsel der Fall.
CMS ist ein kommerzielles und nicht zum ersten mal im Einsatz. Probleme gab es in der Art noch nicht damit.
Beispielseite: HierL
Der Server gibt den ja aus und nicht ich?
Das stimmt so nicht. Wenn wir sagen: Ich habe einen Apache am laufen und fordere die statische Ressource test.gif / test.html an, dann ja. Dann gibt Apache den Content-Length Header aus.
Bei einer dynamischen Ausgabe hingegen, also z.B. durch dein PHP Script sieht das womöglich schon anders aus. Ich bin Perlianer, da liegt es in meiner Verantwortung die Angabe korrekt zu bestimmen und auszugeben.
Als "ich mach alles automatisch Sprache" ist das bei PHP womöglich anders. Evtl. gibt es hier per Default registrierte Handler, die Dir den Job abnehmen. ABER: Ich habe keinen Plan von PHP :-(
Hmmm. Jedenfalls wird die Content-Lenght immer übermittelt.
Mit allen Tools und Headerprüfseiten im Netz.
(Habe abr entdeckt, das nicht auf allen Ausgabeseiten. Obwohl das selbe CMS, selbe Rubriken etc. nur Artikelanzahl unterschiedlich...)
Genauso wäre es möglich, dass das von Dir verwendete CMS einen Bug hat, und als Content-Length schlicht die Anzahl der Zeichen sendet und nicht, wie es sich gehört, den Bytecount. Da Du ja nun UTF8 verwendest, kracht es.
Ich hätte jetzt eher darauf getippt, das der Server da was falsch ermittelt und nicht PHP. Wobei ich mir vorstellen könnte, das das irgendwie mit den Datenbankeinträgen zu tun hat. Keine Ahnung...
Aber, das was du vorgeschlagen hattest, hat nicht funktioniert.
Hast Du, z.B. mit dem von Dir erwähntem Firebug, sicher verifiziert, ob durch die Anpassung des PHP Scripts auch tatsächlich ein größerer Wert für den Content-Length Header beim Client ankommt?
Ne, das ist es ja, er bleibt immer gleich. Egal was ich für eine Zahl eintrage. O.k. jetzt habe ich noch ein bisschen damit gespielt und folgendes festgestellt.
Ich habe also die Zeile
header("Content-Length: 2009");
in das übergeordnete Template gesetzt, so dass wenn das CMS eine Seite ausgibt, zu allererst der Code ausgeführt wird. Das komische ist aber, das der Code auf der Beispielseite nicht greift. Der findet einfach keine Beachtung. Auf anderen Seiten aber doch. Geb ich dann z.B. 99999, eine große Zahl ein, größer als die Datei, bleibt die Maus ewig auf Ladevorgang.
Der PHP-Header-Code-Teil wird nur auf manchen Seiten beachtet. Dann habe ich gesehen, das gar nicht immer der Content-Lenght ausgegeben wird. Auf manchen Seiten nicht, dann aber auch konsequent. Es ist auch nicht Rubrik abhängig. In ein und der selben Rubrik, mit z.B. 21 Artikel, werden, wenn pro Ausgabeseite 5 Artikel eingestellt ist, nur die letzte mit einem Artikel falsch angezeigt. Und dort auch nur der Wert übermittelt.
Alles sehr merkwürdig.
Vielleicht kann mir jemand anderes helfen und sich das mal wirklich anschauen. Das bringt mich langsam zur Verzweiflung...
Ich lasse auch ein bisschen Geld springen wenn mir jemand wirklich helfen kann.
Vielleicht ist ja auf dem Server auch was falsch eingestellt?
Aber das ist ein Massenhoster in Russland, deshalb denke ich, das der Fehler eher nicht bei denen liegt, sonst hätten sich ja schon andere beschwert...
Gruß Ron
Grüße
Ich habe also die Zeile
header("Content-Length: 2009");
in das übergeordnete Template gesetzt, so dass wenn das CMS eine Seite ausgibt, zu allererst der Code ausgeführt wird. Das komische ist aber, das der Code auf der Beispielseite nicht greift. Der findet einfach keine Beachtung. Auf anderen Seiten aber doch. Geb ich dann z.B. 99999, eine große Zahl ein, größer als die Datei, bleibt die Maus ewig auf Ladevorgang.
header kann man nicht irgendwo setzen. Sondern sie sind nur so lange möglich, wie die header Sektion noch nicht durch ein echo "\n\n" abgeschlossen wurde.
Ich kenne PHP nicht, vermute aber, dass nach
echo "<!DOCTYPE ...>"
Die Sache automatisch abgeschlossen wird.
andernfalls kann es sein, dass ein header durch eine spätere version in einem anderen Teil überschireben wird.
Du solltest mal erfassen in welchen Teilen deines CMS header Information definiert wird, und das alles sammeln.
mfg Beat
Ich habe also die Zeile
header("Content-Length: 2009");
in das übergeordnete Template gesetzt, so dass wenn das CMS eine Seite ausgibt, zu allererst der Code ausgeführt wird. Das komische ist aber, das der Code auf der Beispielseite nicht greift. Der findet einfach keine Beachtung. Auf anderen Seiten aber doch. Geb ich dann z.B. 99999, eine große Zahl ein, größer als die Datei, bleibt die Maus ewig auf Ladevorgang.header kann man nicht irgendwo setzen. Sondern sie sind nur so lange möglich, wie die header Sektion noch nicht durch ein echo "\n\n" abgeschlossen wurde.
Ich kenne PHP nicht, vermute aber, dass nach
echo "<!DOCTYPE ...>"
Die Sache automatisch abgeschlossen wird.andernfalls kann es sein, dass ein header durch eine spätere version in einem anderen Teil überschireben wird.
Du solltest mal erfassen in welchen Teilen deines CMS header Information definiert wird, und das alles sammeln.mfg Beat
Hi, danke für die Antwort.
Hab mich wohl blöd ausgedrückt.
Der Header ist schon am richtigen Platz.
Wollte mit meiner Beschreibung nur mitteilen das der Codeteil für alle Seiten gilt.
Wie das mit dem Header in PHP funktioniert, habe ich mittlerweile begriffen. Damit habe ich mich schon auseinandergesetzt als ich noch mit der Zeichenkodierung gekämpft hatte...
Gruß Ron
Hallo,
Angemeldete Benutzer haben hier die Möglichkeit, den Thread Titel zu ändern.
diese Aussage ist nicht falsch - sie suggeriert aber, dass nicht angemeldete User das nicht könnten. Und das ist falsch. *Jeder* Benutzer kann Themenbereich und Thread-Titel in der Vorschau zu seiner Antwort ändern!
Leider bin ich nicht registriert :-(
Auch das wäre leicht zu ändern. ;-)
So long,
Martin
Hoi!
diese Aussage ist nicht falsch - sie suggeriert aber, dass nicht angemeldete User das nicht könnten. Und das ist falsch. *Jeder* Benutzer kann Themenbereich und Thread-Titel in der Vorschau zu seiner Antwort ändern!
Danke für den Hinweis. Obwohl ich das Formular schon das ein oder andere mal zwischen hatte: Die Felder habe ich bislang konsequent übersehen!
Der Knaller - Ich Depp! ;-)
Grüße