Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: istunto-luokka

Sivun loppuun

Triton [06.05.2010 18:10:57]

#

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?

Metabolix [06.05.2010 18:13:10]

#

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.

Triton [06.05.2010 18:20:16]

#

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...

Metabolix [06.05.2010 18:29:14]

#

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);

Triton [06.05.2010 19:36:58]

#

No en tiedä... tuo näyttää, että siellä olis lainausmerkki...

Metabolix [06.05.2010 19:46:20]

#

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.

Grez [06.05.2010 19:53:20]

#

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.

Metabolix [06.05.2010 19:58:30]

#

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.

Grez [06.05.2010 20:00:41]

#

Melkein sanoisin, että parasta jos ei ole olenkaan ?> merkkiä siellä..

//Tällainenkin aiheuttaisi ?>
<? //Rivinvaihdon tulostumisen

Triton [06.05.2010 20:10:37]

#

Okei, nyt sain toimimaan! Hurraa! Kiitos paljon!

Noin yleisesti ottaen kumpaa on parempi käyttää dokumentin tiedostomuotona ANSI:a vai UTF8 ilman BoMia?

Metabolix [06.05.2010 20:17:14]

#

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.


Sivun alkuun

Vastaus

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

Tietoa sivustosta