Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Buforowanie, kompresja gzip i błędy na firefox'ie
Forum PHP.pl > Forum > PHP
proton
Witam

Czy ktoś może mi wytłumaczyć czemu takie coś:

  1. ob_start('ob_gzhandler');
  2. define("COS", 'tekst');
  3. echo COS;


Powoduje że Firefox, już takiej strony nie wyświetli? Problem jest tylko przy kompresji gzip, przy czystym ob_start(); wszystko jest ok.
erix
Bardzo proste - nagłówek GZip zawiera sumę kontrolną, a dopisanie czegokolwiek za skompresowanym strumieniem powoduje jej "zakłamanie".

Innymi słowy, CRC jest obliczane dla zawartości w buforze wyjścia, Ty dopisujesz zawartość. Gdyby odciąć to od wynikowego strumienia, Fx wyświetliłby treść prawidłowo. A przeglądarka nie wie, gdzie kończy się skompresowany blok i dlatego dochodzi do błędu nieprawidłowej sumy kontrolnej = problemów w wyświetleniu.
proton
Rozumiem. Lecz teraz rodzi się pytanie czy istnieje na to jakiś sposób, (tj. cały mój system polega na tym że działa on tak obstart -> ob_get_content -> ob_end_clean, obstart -> ob_get_content -> ob_end_clean, itd. a na końcu wyświetlanie tego co pobrałem wcześniej przez ob_get_content).

Pomyślałem o czymś takim:

Kod
ob_start("ob_gzhandler");
echo '1';
define("COS1", ob_get_clean());
echo '2';
define("COS2", ob_get_clean());
echo COS1;
ob_end_clean();


Ale to również nie działa.
erix
Po co kombinujesz tak ze stałymi...?

Cytat
obstart -> ob_get_content -> ob_end_clean, obstart -> ob_get_content -> ob_end_clean

To go napisz od nowa. Naprawdę nie rozumiem, po co tak utrudniasz proste zadanie; jest tylko kilka sytuacji, w których takie używanie kontroli wyjścia ma sens. Zazwyczaj DA SIĘ to rozwiązać w inny sposób, bez takich kombinacji.
kosmowariat
ob_start('ob_gzhandler'); a na końcu sam się wyśle
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.