MySQL - Content-Length ermitteln
Malcolm Beck´s
- php
hi,
Mein Lokaler Server (Xampp) generiert eigenständig einen Content-Length-Header, auch für PHP-Dateien (1und1 macht das z. B. nicht), wo wird dass eingestellt?
Und, kann man das auch über die .htaccess oder der php.ini einstellen?
Ich suche eine Möglichkeit, bei der ich nicht an die Server-Konfiguration ran muss -- 1und1 lässt mich da leider nicht ran ;)
Was ich schon versucht habe:
Meine Inhalte kommen aus der DB und werden dann über die index.php an Smarty übergeben, mit
header("Content-Length: " . filesize('index.php'));
bekomme ich immer „Content-Length: 2853“ -- Ich weiss nicht mal, ob das jetzt die länge meines Scriptes oder das des Templates ist, jedenfalls hat die Zahl nichts mit den Inhalten aus der DB zutun.
Ich hab mir auch schon überlegt, alle Zeichen, die aus der DB kommen zu zählen und daraus den Content-Length-Header zu generieren, nur möchte ich mein Script nicht zusätzlich mit so einer Kleinigkeit belasten, wie könnte ich das sonst noch realisieren?
mfg
Hallo,
Was ich schon versucht habe:
Meine Inhalte kommen aus der DB und werden dann über die index.php an Smarty übergeben, mit
header("Content-Length: " . filesize('index.php'));
*g*
bekomme ich immer „Content-Length: 2853“ -- Ich weiss nicht mal, ob das jetzt die länge meines Scriptes
Was den sonst.
oder das des Templates ist,
Heißt Dein Template "index.php"? Schon mal auf die Idee gekommen, Dir die Doku zu filesize anzuschauen? Wieso sollte Dir filesize() angeben, wie groß die _Ausgabe_ eines Skriptes ist?
Freundliche Grüße
Vinzenz
hi,
header("Content-Length: " . filesize('index.php'));
*g*
Du hast gut grinsen ;)
oder das des Templates ist,
Wieso sollte Dir filesize() angeben, wie groß die _Ausgabe_ eines Skriptes ist?
Ich wusste, das mir filesize()
in Verbindung mit der index.php nicht weiterhilft. Ich hatte auf meiner suche überall filesize()
gelesen und dachte, dass es wenigstens vom Ansatz her schon mal in die richtige Richtung geht.
Wenn ich mit filesize()
das Template auslese, bekomme ich auch nicht das passende Ergebnis.
Wie könnte ich sonst mein Problem lösen? Hat MySQL vielleicht einen eingebauten Zeichen-zähler?
Dann könnte ich die Zeichen des Template und die des Inhaltes zusammenrechnen und hätte meine Content-Length.
mfg
Hi,
Ich hab mir auch schon überlegt, alle Zeichen, die aus der DB kommen zu zählen und daraus den Content-Length-Header zu generieren, nur möchte ich mein Script nicht zusätzlich mit so einer Kleinigkeit belasten, wie könnte ich das sonst noch realisieren?
output_buffering, ob_get_length()
MfG ChrisB
hi,
output_buffering, ob_get_length()
Danke für den Hinweis, nur bin ich jetzt ein wenig verwirrt.
Auf meiner Lokalen Maschine steht im Header
„Content-Length: 3805“
Jetzt habe ich das mit ob_get_length() probiert und das Ergebnis von diesem ist
$smarty->display('test.tpl'); // ob_start() war nicht nötig!?
$res = ob_get_length();
echo $res;
„9893“
Dann habe ich die Seite gespeichert und mit strlen() nochmal durchgezählt, Ergebnis
„9935“
Zählt mein Apache falsch?
mfg
Guten Tag,
Zählt mein Apache falsch?
Ist denn die Zeichenkodierung auf beiden Systemen identisch?
Gruß
Christoph Jeschke
hi,
Zählt mein Apache falsch?
Ist denn die Zeichenkodierung auf beiden Systemen identisch?
Alles ausnahmslos UTF-8 ; ich hab jetzt die ob_get_length(); Geschichte hochgeladen, sieht eigentlich soweit ganz gut aus, nur, was macht mein Lokaler Apache hier falsch?
Die Header der Startseite im direkten Vergleich:
Online -- „Content-Length: 8161“
Lokal -- „Content-Length: 3168“
Müsste Lokal nicht der Inhalt abgeschnitten werden? Wenn auf dem Webserver Online die Content-Length zu kurz ist, wird nicht alles angezeigt.
mfg
hi,
ich hab das Problem gefunden, ich hab Lokal in meiner php.ini
output_buffering = ON
zlib.output_compression = ON
nachdem ich diese auf OFF gestellt hatte stimmten die Content-Length ungefähr überein.
Was mach ich denn jetzt? Online habe ich auch output_buffering aktiviert, wieso wirkt das nicht?
mfg
Guten Tag,
Was mach ich denn jetzt? Online habe ich auch output_buffering aktiviert, >
wieso wirkt das nicht?
Und die Kompression? Hast du diese auch deaktiviert?
Gruß
Christoph Jeschke
hi,
Was mach ich denn jetzt? Online habe ich auch output_buffering aktiviert, wieso wirkt das nicht?
Und die Kompression? Hast du diese auch deaktiviert?
Ich hab Online und Offline beides gleich,
Online php.ini
output_buffering = ON
zlib.output_compression = ON
Online wird die Seite ja mit „Content-Encoding: gzip“ ausgeliefert, ich habe auch versucht, das buffering direkt im Script zu starten, brachte aber auch nichts.
ob_start("output_buffering");
$smarty->display('test.tpl');
header("Content-Length: " . ob_get_length());
Woran kann das liegen?
mfg
hi,
ich hab mir das heute noch mal angesehen und lasse es wohl vorerst so, wie es ist, mit den jetzigen Content-Length, vorerst reicht mir das.
Danke allen für die Hilfe.
mfg
echo $begrüßung;
ich hab mir das heute noch mal angesehen und lasse es wohl vorerst so, wie es ist, mit den jetzigen Content-Length, vorerst reicht mir das.
Schick lieber gar keine Content-Length als eine falsche. Das erste sind die Browser gewöhnt, beim zweiten verhalten sie sich vielleicht in ungewollter Manier.
echo "$verabschiedung $name";
hi,
Schick lieber gar keine Content-Length als eine falsche. Das erste sind die Browser gewöhnt, beim zweiten verhalten sie sich vielleicht in ungewollter Manier.
Falsch sind sie ja nicht, nur halt unkomprimiert. Stellt sich nur die frage, was Effektiver ist.
Gefühlt ladet die Seite jetzt schneller.
Ich hab Gestern noch zur Kontrolle Browsershots besucht, scheint eigentlich soweit alles Ok zu sein.
Jetzt bin ich recht unentschlossen, soll ich die Content-Length lassen oder entfernen?
mfg
Hi,
Schick lieber gar keine Content-Length als eine falsche. Das erste sind die Browser gewöhnt, beim zweiten verhalten sie sich vielleicht in ungewollter Manier.
Falsch sind sie ja nicht, nur halt unkomprimiert.
D'oh!
Das interessiert erst mal ueberhaupt nicht.
Der Browser fordert vom Server eine Ressource an, und bekommt von diesem in der Antwort mitgeteilt, "jetzt kommen x Byte an Daten".
Also stellt sich der Browser auch darauf ein, x Byte zu bekommen. Bekommt er irgendeine andere Anzahl an Daten, kannst du nicht voraussehen, was fuer Folgen das haben kann.
Es geht bei der Content-Length rein um den *Empfang* der Daten. Ob diese komprimiert sind oder nicht, spielt dabei ueberhaupt keine Rolle.
Ob die spaeter, ausgepackt, zufaellig so viele Bytes ergeben, wie die fehlerhafte Content-Length-Angabe glauben machen wollte, ist auch irrelevant.
Jetzt bin ich recht unentschlossen, soll ich die Content-Length lassen oder entfernen?
Wenn du eine Content-Length sendest, dann bitte nur genau die eine, die der tatsaechlichen Anzahl der vom Server an den Client geschickten Bytes des Request Bodys entspricht.
Alles andere waere grober Unfug.
MfG ChrisB
hi,
Wenn du eine Content-Length sendest, dann bitte nur genau die eine, die der tatsaechlichen Anzahl der vom Server an den Client geschickten Bytes des Request Bodys entspricht.
Alles andere waere grober Unfug.
Da stimme ich dir zu. Ich habe auch ein wenig getestet und verschiedene Möglichkeiten miteinander verglichen, ich bekam jedes mal eine andere Zahl vorgesetzt (wenn auch nur mit ein Paar Zeichen Unterschied).
Ich habe 's jetzt raus genommen.
was mich aber interessiert ist, wenn ich
output_buffering = ON
zlib.output_compression = ON
auf meiner Lokalen Maschine in der php.ini stehen habe, wird die Content-Length automatisch in den Header eingefügt, Online nicht.
Liegt dass an der Konfiguration von Apache oder weil PHP bei mir Lokal als CGI(?) ausgeführt wird?
mfg