Tiedän ettei ennen headereiden lähettämistä saa tulostaa mitään jne mutta tämä menee jo liian pitkälle! Epätoivoissani tiivistin koodin lopulta muotoon
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html><?php session_start(); ?> <head> <title>Kotisivuyhteisö</title> <link rel="stylesheet" type="text/css" href="style.css"> </head>
mutta siitä huolimatta "headers already sent - output started at line 3". Mitä tässä nyt oikein keksisi?
Sivun alkuun (ennen kuin tulostat mitään):
<?php ob_start(); ?>
Sivun loppuun:
<?php ob_end_flush(); ?>
"tuloste" tarkoittaa tässä tapauksessa mitä tahansa tekstiä mikä palvelimelta lähtee klienttikoneelle kolisemaan. Se tarkoittaa siis kaikkea html:ää yms., ihan doctypestä alkaen. Jos tuntuu liian vaikealle saada niitä headereitä lähtemään ennen muuta tavaraa, niin selaile php.netistä output buffering-osio.
EDIT: aha, Draiz ehtikin kertomaan olennaisimman osan em. asiasta :)
Draiz kirjoitti:
Sivun alkuun (ennen kuin tulostat mitään):
<?php ob_start(); ?>Sivun loppuun:
<?php ob_end_flush(); ?>
Pitääkös tuo laittaa sitten ennen doctype määritystä, siis tuo aloitustagi? Tuntuu kyllä aika raiskaukselle. ^^
Eiköhän se tullut jo edellisistä viesteistä selväksi että ihan sivun alkuun tuo ob_start ja loppuun ob_end_flush. Ja ennenku kysyt että "ihanko ihanko ihanko alkuun?", niin vastaan jo että ihan alkuun :)
http://pp.kpnet.fi/blaze/codefaq/#headerssent
Minä yleensä aloitan sivun PHP-koodilla joka tapauksessa, sillä tavalla on helpompaa. Samalla saa mahdollisuuden liittää saman yläosan includella kaikille sivuille.
Joo laitoin ihan ihan ihan alkuun ja hyvin toimii.
PHP-koodi ei lähde asiakkaalle. Koodi voi olla vaikka näin:
<?php $jotain = 'PÄLÄ PÄLÄ PÄLÄ PÄÄ!'; $voi_olla_vaikka_mita_muuta = 'Joo.'; $kunhan_et_kayta_echoa_niin_kaikki_ok = 'Tottele.'; ?><!DOCTYPE ...> <head> </head> <body> <?php echo $jotain; ?> </body> </html>
Tärkeintä on, että asiakaskoneen saamalla sivulla <!DOCTYPE tulee ensimmäisestä merkistä ja ensimmäiselle riville, ja tuolla tavalla tekemällä näin myös tapahtuu.
Aihe on jo aika vanha, joten et voi enää vastata siihen.