Autor Zpráva
jefitto44
Profil
Niekde na stránke potrebujem potrebujem zrazu presmerovať... uprostred kódu. Za bežných okolností by som použil header("location:blabla"); a bolo by. Toto však hádže warning, resp. strict (teraz neviem ktoré), aj keď to nevidno, viem, že sa to takto robiť nemá. Ako môžem presmerovať pomocou PHP na inú adresu napriek tomu, že už prebehli nejaké výstupy, že sa už niečo vyechovalo?
juriad
Profil
Nauč se psát stránky pořádně tak, abys o přesměrování věděl před tím než něco vyechuješ. Kdybys používal nějaké šablony, byl bys k tomu nenuceně dotlačen.
Jako dočasné řešení lze použít ob_start.
jefitto44
Profil
Odkedy dokáže ob_start presmerovať?
Giga
Profil
Presmerovať nedokáže...
juriad
Profil
jefitto44:
Nedokáže, ale zabrání jakémukoli výstupu. Jelikož propustí header, za nímž bys měl skript ukončit pomocí exit, můžeš přesměrovávat kdykoli. Za cenu vyšší spotřeby paměti na serveru (celý výstup si musí bufferovat).
Joker
Profil
Ideální je před tím přesměrováním žádný výstup nedělat.
Resp. mít prezentaci oddělenou od aplikace, třeba přes šablonovací systém. Přesměrování se udělá v rámci aplikace a tam ještě žádný výstup není. Výstup se dělá v rámci prezentace, ale ta už nemá co přesměrovávat.

juriad:
Jelikož propustí header, za nímž bys měl skript ukončit pomocí exit, můžeš přesměrovávat kdykoli. Za cenu vyšší spotřeby paměti na serveru (celý výstup si musí bufferovat).
Pak to má ještě dvě nevýhody:
1. Delší čas načtení stránky (ale většinou neznatelně), protože místo aby se kód odesílal průběžně, pošle se naráz až na konci zpracování.

2. I to přesměrování jako takové je o něco větší vopruz. Není totiž ideální dělat jen header + exit, protože některé prohlížeče automaticky nepřesměrují (případně jim to uživatel zakáže) a návštěvník pak skončí na prázdné stránce.
Takže by to mělo být header, vypsat odkaz na tutéž adresu a exit. Takže s OB je nutné smazat buffer, případně vypnout OB, vypsat odkaz a exit.
juriad
Profil
Joker:
K tomu druhému bodu. Který prohlížeč nepřesměruje při hlavičce 3xx (kromě různých CLI utilit)? Píšeš to z důvodu defenzivního programování, nebo jsi se s tím někdy setkal?
Obvykle mám opačný problém - zabránit prohlížeči přesměrovat z důvodu debugování.
Joker
Profil
juriad:
Který prohlížeč nepřesměruje při hlavičce 3xx (kromě různých CLI utilit)?
V Opeře by to mělo být Nastavení, Připojení, Povolit automatické přesměrování.

Měl jsem za to, že to má každý slušný prohlížeč?
Keeehi
Profil
Joker:
Měl jsem za to, že to má každý slušný prohlížeč?
Co jsem teď koukal tak by to měli mít víceméně všechny.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: