Tein PHP:llä luokan, jonka avulla pystyy käyttämään istuntoja. Ainoaksi ongelmaksi tuli se, kun yritin require_once-funktiolla sisällyttää luokkaa muuhun projektiini, niin luokan instanssin luonnin yhteydessä saan "headers is already sent" -virheilmoituksen, vaikken tietääkseni tulostanut mitään sivulle... Eli miten ihmeessä saan tuon luokkani sisällettyä sivuun?
Tarkista nyt vielä ylimääräiset rivinvaihdot tiedostojen alussa ja lopussa ja mahdollinen Unicode-BOM, josta oli äskettäin pitkä keskustelu. Ilmoitus ei tule suotta, kyllä siellä jotain on oltava.
BOM ei ole käytössä, ja testasin myös poistaa kaikki ylimääräiset rivinvaihdot ts. laitoin dokumentin ylimmälle riville tämän:
<?php require_once("session.class.php"); $session = new Session(); ?>
Eipä siis auttanut... tosin testasin laittaa sivulle if-lauseen ja sen sisälle session_start-funktion ja minkäänlaista ilmoitusta ei tullut...
Luultavammin vika on session.class.php:ssä. Kokeilepa joka tapauksessa ladata ongelmallinen sivu PHP:n file_get_contents-funktiolla ja katsoa enkoodatusta tulosteesta, mitä alussa on:
<?php echo substr(json_encode(file_get_contents("http://sivus.to/testi.php")), 0, 20);
No en tiedä... tuo näyttää, että siellä olis lainausmerkki...
No siis tietenkin JSON-enkoodattu teksti alkaa lainausmerkistä, mutta mitä sitten tulee? Laita vaikka se koko alkupätkä näytille, niin saadaan asiaan jonkinlainen varmuus.
Tarkistithan niistä includoimistasi tiedostoista, että myöskään loppuun eli ?> jälkeen ei ole jäänyt mitään (esim. rivivaihtoa)? Tai oikeastaan vielä parempi jättää kokonaan lopetus pois includattavista tiedostoista. Sinänsähän tästä Metabolix jo sanoikin, mutta vastauksen perusteella en ollut vakuuttunut, että siellä ei mitään olisi.
Tosiaan, on ehkä turvallisinta ottaa tiedoston lopusta merkintä ?> kokonaan pois, kun ei sillä ole mitään virkaa, jos perässä ei tule tulostettavaksi tarkoitettua dataa.
Melkein sanoisin, että parasta jos ei ole olenkaan ?> merkkiä siellä..
//Tällainenkin aiheuttaisi ?>
<? //Rivinvaihdon tulostumisen
Okei, nyt sain toimimaan! Hurraa! Kiitos paljon!
Noin yleisesti ottaen kumpaa on parempi käyttää dokumentin tiedostomuotona ANSI:a vai UTF8 ilman BoMia?
Käytännön merkitys rajoittuu tulostettavaan dataan, ja sitä taas ei kuulu kuitenkaan määritellä varsinaisen ohjelmakoodin seassa. Kuitenkin jos on mitään kiinnostusta tukea Unicode-merkistöä, on loogisinta pitää saman tien kaikki projektin tiedostot UTF-8-merkistössä. Mitään haittaa tästä ei ole, kunhan osaa tuon BOM-asian hoitaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.