En sitten käsitä millään näitä juttuja. Ongelmana on juuri kun olen käyttänyt session_start juttua ja jos on yhtään include "jotain.php"; niin tulee header virheilmoitus. Sen verran selaillu että ongelma on juuri session_start ja ob_startilla pitäs toimia, vai???
Kopioitu täältä jostain:
<?php // Aloitetaan puskurin täyttö ob_start(); echo "<html><head><title>Output Buffering</title></head><body>"; echo "Selaimeesi asetetaan eväste odota hetki..."; setcookie("testievaste", "testiä", time() + 60); echo "<br>Eväste asetettu"; echo "</body></html>"; // Tyhjennetään puskuri, joka samalla näyttää echo:lla tulostetun rivin ob_end_flush(); ?>
<?php //$teksti sisältää PHP-koodia ob_start(); highlight_string($teksti); $teksti=ob_get_contents(); ob_end_clean(); ?>
Eli miten nää pelaa, mihin väliin esim syötän koodin $testi = "testi"; Käytän yhtä valmista koodia ja siellä on haettu id-numero. Olen tehnyt siihen session_start ja $_SESSION["id"] = $id;, jonka sitten haen toisessa tiedostossa, mutta haluan sinne myös include "jotain.php"; mutta header virhe tulee.
Mod. lisäsi kooditagit, opettele käyttämään niitä itse!
Ihan vinkkinä ensin: muista käyttää kooditageja.
Mummot, täsä nyt jouda pilkkua viilaamaan ku pitää saada tehtyä. Auttakaa ny ku tämmönen tänne on kerran tehty. Ihme porukkaa!
You have blank lines in your HTML code, remove them and try again. Siitä löyty vika ainakin osittain, mutta miten sain vielä includet pelaan
Jooh, ihan ensimmäiseksi kannattaa etsiä internetistä hyvä netiketti, ja ei vain lukaista, vaan lukea se ajatuksella läpi.
Ootko kokeillu laittaa includea?
Ihan suoraan ne toimii. Pidät huolen vaan että includet tulee vasta ob_start():n jälkeen, niin et kosauta hommaas tiedostojen alussa olevilla välilyönneillä tai typerillä ylimääräisillä echoillasi, joita arvatenkin liitettävät php-tiedostot puskevat ilmoille.
Evästeet asetetaan ennen ku tulostetaan mitää.
ankzilla kirjoitti:
Evästeet asetetaan ennen ku tulostetaan mitää.
Tarkemmin sanottuna headerit pitää lähettää ennen sisältöä. Headereihin kuuluvat myös keksit.
Väärin: print 'Heippa'; if ($error) exit( header('Location: error.php') ); Oikein: if ($error) exit( header('Location: error.php') ); print 'Heippa';
PHP lähettää headerit selaimelle automaattisesti ennen ensimmäistä tulostetta (esim. print-kutsu tai virheilmoitus).
Output bufferingilla saa aikaan sen, että PHP laittaa tulosteen ensin bufferiin sen sijaan, että lähettäisi sen heti selaimelle. Tällöin headereita voi asetella vielä tulostuskutsujenkin jälkeen. PHP:n asetuksista riippuen bufferointi voi olla päällä oletusarvoisesti, muutoin sen saa käyttöön juurikin kutsumalla funktiota ob_start().
Puskurin koko on kuitenkin rajallinen, joten ei voi taata, että kaikki headeria edeltävät tulosteet olisivat vielä säilössä. Siksi minusta on huonoa ohjelmointia, että niitä asettaa tulostuksen jälkeenkin. Yleensä ei edes ole haastavaa koodata niin, että kaikki tarpeelliset headerit on asetettu jo ennen ensimmäistäkään tulostusta.
<?php // Aloitetaan puskurin täyttö ob_start(); echo "<html><head><title>Output Buffering</title></head><body>"; echo "Selaimeesi asetetaan eväste odota hetki..."; setcookie("testievaste", "testiä", time() + 60); echo "<br>Eväste asetettu"; echo "</body></html>"; // Tyhjennetään puskuri, joka samalla näyttää echo:lla tulostetun rivin ob_end_flush(); ?>
Tämä esimerkki on loogisesti väärin. Vaikka koodissa setcookie() on tulostuskäskyjen välissä, oikeasti eväste on lähetetty selaimelle kauan ennen <html>-tagia.
Selain siis vastaanottaa tällaista tietoa:
'header 1' 'header 2' ... 'cookie testievaste' '<html><head><title>Output Buffering</title>...' ... '</body</html>'
Tuolla on myös käyty läpi Headers Already Sent -virheilmoituksen taustoja:
http://wiki.mureakuha.com/wiki/Mitä_tarkoittaa_
Selvensi asiaa vähän. Kiitokset.
Aihe on jo aika vanha, joten et voi enää vastata siihen.