PHP - amit senki nem mondd el egy kezdőnek
Erre is magamnak kellett rájönnöm.
Meghívsz egy php file-t amiben nincs echo/print csak összerak valamit és visszaküldi annak a lapnak ahonnan meghívták.
header locationnal megy vissza
ha a location átirányítás sor után még vannak utasítások és függvények
azok végrehajtódnak annak ellenére, hogy az átirányítás már átdob.
/Ha csak nem irsz neki exit; -et location után/
Te már rég messsze jársz a php azonban szépen lefuttja a location utáni kódot.
Persze hogy hiba miatt jöttem rá erre.
Bent maradt egy session destroy a kód végén.
De én már jóval előbb header locationnal átmentem onnan.
Nem értettem mért nem működik a kódom.
Mert nem volt exit-em a session destroy lefutott,
csak néztem hol vannak a session változók.
Ez annyira egyszerű, épp ezért nem mondja el senki.
■ Meghívsz egy php file-t amiben nincs echo/print csak összerak valamit és visszaküldi annak a lapnak ahonnan meghívták.
header locationnal megy vissza
ha a location átirányítás sor után még vannak utasítások és függvények
azok végrehajtódnak annak ellenére, hogy az átirányítás már átdob.
/Ha csak nem irsz neki exit; -et location után/
Te már rég messsze jársz a php azonban szépen lefuttja a location utáni kódot.
Persze hogy hiba miatt jöttem rá erre.
Bent maradt egy session destroy a kód végén.
De én már jóval előbb header locationnal átmentem onnan.
Nem értettem mért nem működik a kódom.
Mert nem volt exit-em a session destroy lefutott,
csak néztem hol vannak a session változók.
Ez annyira egyszerű, épp ezért nem mondja el senki.
Megnéztem a header() függvény
A php úgy működik, hogy két belső puffere van: egy a http fejléceknek, egy pedig a html kódnak. Mivel egyszerre több fejlécet is meg lehet adni, amelyek egyszerű karakterláncok, ezeket beteszi szépen a belső puffertömbjébe, ahogy egymás után hívogatod a header() függvényt, majd a végén, miután végetért a script, összeragasztja a két puffert, és kiküldi a kliensnek.
Tovább bonyolítja a dolgot, hogy a webszerver (pl. Apache) saját belső pufferekkel dolgozik, és felülírhatja a te fejléceidet, amit a header() függvényben megadtál.
Miért kéne megszakadnia a
Persze hogy evidens
Apró és egyszerű dolog, kezdőknek jó tudni.
Én is az vagyok.
Jó lenne itt ilyen apró evidenciákat gyűjtögetni.
Annyira egyerű, hogy senki le nem írja, de mire magad rájösz egy hiba kapcsán ...
Konkrétan ez a php.net-es
Pontosabban
Viszont épp azért nem száll ki, mert egyes esetekben szükséged lehet pl. egy hosszabb kód futtatására, aminek a kimenethez (mivel az egy másik oldal) semmi köze, de a szerveren fontos műveleteket végzel (pl. adatbázissal).
Tehát épp az lenne a baj, ha magától kitalálná az exitet, mert előbb kiolvassa, hogy location. Nekünk jobb így, nem nagy dolog odafigyelni rá.
A másik az exittel kapcsolatban, hogy ha bonyolultabb, szerteágazó kódot írsz, akkor ugye egy fv-ből is kiszállsz egy return-el, ahol lehet, a PHP-ból meg exit-el. Sőt, megadhatsz paramétert is, hogy hibával szálltál ki (pl. ha 404-et dobsz).
Kifejezetten jó nekünk, hogy "nem tudja".
Normális kód ugye eleve nem
Cli-s kódok
Persze, ha
Ezért írtam én is elsőként a fv-ből return-t, ez (exit) a ritkábbik eset, de előfordul. A soha szerintem túlzás, épp átirányítás miatt lehet érdekes, még MVC-ben is. De ez lehet programozói gondolkodás-különbség is, egyikünkre se merném itt mondani, hogy tuti igaza van. Lehet, hogy soha, szerintem ritkán.