Új hozzászólás Aktív témák

  • cucka

    addikt

    válasz Paulie86 #2440 üzenetére

    A setcookie() ebből a szemponbtból pontosan ugyanúgy viselkedik, mint a header(), vagyis amikor meghívod, létrehozza (és kiküldi a böngészőnek) a http fejlécet.
    A problémát az okozza, hogy amikor legelőször kiírsz valamit a standard kimenetre (ez lenne más szóval az output buffer), akkor szintén elküldi a http fejlécet. Elküldött fejlécet pedig már nem lehet módosítani.

    Namost egy rendesen megírt weboldal struktúrája valahogy a következő módon néz ki
    - bemeneti adatok ellenőrzése
    - bemeneti adatok feldolgozása, html/css kód előkészítése, fejléc beállítása
    - html/css kód kiírása

    Ha a tiednél a kiírás nem az utolsó, akkor a kód nem jó. Ettől még működhet, arra gondolok, hogy minőségileg nem megfelelő a kód.

    de elvileg ha ob_start() és ob end flush között van akkor nincs gond.
    Az ob_start annyit csinál, hogy az output buffer-t (a programod standard kimenetét) leállítja, az ob_end_flush pedig kiírja a bufferben felhalmozott, még ki nem írt szöveget. Tehát hiába van a login.php-d végén az ob_end_flush, ha a login.php-t a header hívás előtt include-olod, mert a flush hamarabb fog lefutni, mint a header.

    Amúgy egy jó tanács: normálisan strukturált php kódnál nagyon ritkán van szükség az output buffer-t kezelő függvényekre, ezért használatuk helyett javaslom, inkább strukturáld át a kódot.

Új hozzászólás Aktív témák

Hirdetés