Diskuze: Funkce header nevyhazuje chyby
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Chybu by ti to opravdu vyhodit mělo, protože HTTP hlavičky prohlížeč zpracovává ještě před samotným obsahem stránky. Deklaruje se pomocí nich například také typ obsahu (i když se jedná o .php soubor, pomocí hlavičky můžeš prohlížeči říct, že mu předáváš JSON, který pak vygeneruješ v tom PHP, on se podle toho bude chovat). Zkoušel jsem to i u sebe na serveru, též se redirect provede. Pokud se tu nedočkáš reakce, doporučuju kontaktovat Jakuba Vránu, který se na PHP podílí.
Jinak, k tomu PSku - HTML tělo tam vůbec být nemusí, stačí, když před posláním hlavičky vypíšeš jediný znak včetně mezer. Teda, mělo by to stačit podle dokumentace PHP. Ale očividně nestačí.
Output buffering na mém serveru asi zaplý není (díval jsem se na defaultní hodnoty a měl by být vyplý, já ho určitě nezapínal), a i přesto mě to redirectne. Buď nějaká záhadně se objevující vlastnost v PHP nebo činnost vyšší moci.
Ještě bych tě teoreticky trochu víc uvést do situace. Když header
pošleš po odeslání nějakého textu, je to jako kdybys kamarádovi dal
napít metanolu, a až po tom, co vypije smrtelnou dávku (smrtelná dávka = 1
jediný znak na začátku souboru před hlavičkami) bys mu řekl, že metanol
je jedovaný a že z toho oslepne. S tím už toho ale kamarád moc
nenadělá.
Stejně pracuje prohlížeč či robot. Ty mu naservíruješ nějaká data, on
je v průběhu servírování už vykresluje a pak mu řekneš, že po tobě
měl chtít nějaké jméno a heslo. Prohlížeč už ti ale stránku vykreslil
a tak s tím toho taky moc nenadělá. Je to jako kdyby sis pustil do domu
vědomě zloděje, on ti dům vybílil a ty na něj pak řval přes celou ulici,
že sis to rozmyslel a že ty věci chceš zpátky. Když ale pošleš header o
autorizaci, zloděj nemá klíč a tak se do domu nedostane.
V phpinfo() máš u hodnoty output_buffering co?
Dovolím si drobek techničtější vyvětlení ob.
Pokud je vypnutý, tak se každý výpis hned posílá prohlížeči, takže když je stránka co byla uvedená v příkladu a ob je vypnutý, tak prohlížeč dostane text a potom hlavičky, což je průser a vyskočí chyba.
Pokud je zapnutý, php odesílá výsup až po dokončení skriptu, veškerý výstup zatím čeká v bufferu, tím pádem může php nejdříve odeslat hlavičky i když jsou v těle dokumentu.
doporucuje sa davat na uplny zaciatok skriptu funkcie, co posiela hlavicky,
lebo aj samotny html kod ti posle hlavicku a podla nastavenia PHP sa ti moze
zobrazit chyba pri funkcii header(), ze uz bola raz poslata hlavicka...
a takisto sa nedoporucuje ani ukoncovat skript ?>, kedze
skript sa automaticky dokonci pri natrafeni znaku EOF
Zobrazeno 9 zpráv z 9.