Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: session_start(): headers already sent

Sivun loppuun

alker [29.06.2009 15:17:29]

#

Eli tuollainen virhe. Tässä on koodi mitä käytän.

<?php
session_start();
if (!$_SESSION['tunnus']) {
?>
<P>
<form method="POST" action="pro.php?id=log">
Kirjoita tunnus:<br>
<input type="text" name="tunnus"><br>
Kirjoita salasana:<br>
<input type="password" name="salasana"><br>
<input type="submit" value="Kirjaudu!">
</form>
		</p>
<?php
}
else {
?>
Tervetuloa,<?php echo $_SESSION['tunnus']; ?>
                            <ul>
                                <li><a href="hallinta.php">Hallinta</a></li>
                                <li><a href="users.php">Käyttäjälista</a></li>
                                <li><a href="ulos.php">Kirjaudu ulos</a></li>
                            </ul>
<?php
}
?>

Ja virhe on rivillä 2

tsuriga [29.06.2009 15:21:20]

#

http://pp.kpnet.fi/blaze/codefaq/#headerssent

alker [29.06.2009 15:43:09]

#

Siis voisiko kertoa joku miten tuon voi korjata??

Metabolix [29.06.2009 15:51:36]

#

Kyllähän se tuossa hyvin tarkasti kerrotaan: session_start haluaa lähettää HTTP-otsikoita, mutta se ei ole enää mahdollista, koska otsikot on jo lähetetty, koska ne pitää lähettää ennen tulostamista ja ennen tuota riviä on jo tulostettu jotakin. Tulostuksen voi aiheuttaa echo, print, <?php ?>-tagien ulkopuolinen teksti tai vaikkapa varoitusviesti, siis mikä tahansa, mitä koodi tulostaa. Näet vaikkapa selaimen Näytä lähdekoodi -toiminnolla, mitä sivulla on ennen tuota virheilmoitusta.

Korjaustapakin kerrotaan hyvin selvästi: poista aiemmat tulostamiset eli tulosta vasta session_start-rivin jälkeen.

Grez [29.06.2009 16:17:36]

#

Kysyjän koodi näyttää kuitenkin alkavan <?php:lla ja virhe on heti rivillä 2.

Eli olisiko tässä tapauksessa kyse siitä, että tekstieditori jota kysyjä on käyttänyt, on lisännyt tiedoston alkuun Byte Order Markin eli BOM:in.

Eli ennen tuota <?php olisi kolme merkkiä, jotka eivät näy (paitsi UTF:ää tukemattomissa ohjelmissa). Ongelma poistuisi siis tallentamalla tiedosto "without BOM" muodossa. Riippuu editorista miten tapahtuu.

Joka tapauksessa, ennen <?php ei saa olla yhtään mitään. Ota vaikka binäärieditori ja katso että ensimmäinen merkki tosiaan on < ( ascii 60 eli heksana 3C)

Blaze [29.06.2009 16:30:52]

#

Tai sitten tämä pätkä sisällytetään johonkin includella, jolloin helpoin korjaus on käyttää output bufferingia, mutta oikea syypää on ohjelman huono rakenne--seuraavalla kerralla kannattaa miettiä vähän tarkemmin.

alker [29.06.2009 17:23:05]

#

Joo. olin upottanut ton sivulle ja sen takija tuli virhe

Grez [29.06.2009 17:57:22]

#

Joo, rasittavaa taas kun ei voi heti kysyttäessä kertoa kuin puolitotuuksia. :(


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta