Autor | Zpráva | ||
---|---|---|---|
jefitto44 Profil |
#1 · Zasláno: 11. 3. 2015, 17:47:24
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 |
#3 · Zasláno: 11. 3. 2015, 17:53:27
Odkedy dokáže ob_start presmerovať?
|
||
Giga Profil |
#4 · Zasláno: 11. 3. 2015, 17:58:40
Presmerovať nedokáže...
|
||
juriad Profil |
|||
Joker Profil |
#6 · Zasláno: 12. 3. 2015, 08:52:10
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 |
#7 · Zasláno: 12. 3. 2015, 09:56:44
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 |
#8 · Zasláno: 12. 3. 2015, 13:32:16
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 |
#9 · Zasláno: 12. 3. 2015, 13:36:35
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. |
||
Časová prodleva: 10 let
|
0