PelleP Skrevet 22. januar 2011 Del Skrevet 22. januar 2011 Jeg har et hjemmesideprosjekt som fungerer fint lokalt på min egen PC, men når jeg laster det opp til Domeneshops server får jeg følgende feilmelding: Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/1/p/popetersson/www/index.php:9) in /home/1/p/popetersson/www/pa_toptekst.php on line 2 Veldig takknemlig om noen kan forklare hvorfor jeg får den feilmeldingen. Jeg har prøvd fjerne session_start();, men da er det ikke mulig å logge på siden. Koden for de to aktuelle filene er gjengitt nedenfor: index.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>Pelles avkrok</title> </head> <body> <?php include_once 'pa_toptekst.php'; ?> </body> </html> toptekst.php <?php //toptekst.php session_start(); include_once 'pa_funksjoner.php'; $current_uri = $_SERVER['REQUEST_URI']; echo "<h1>Pelles avkrok</h1> <a href='index.php'>Home å</a> | <a href='pa_bildegalleri.php'>Bildegalleri</a> | <a href='pa_gjestebok.php'>Gjestebok</a> | <a href='geografitest.php'>Geografitest</a> | <a href='pa_omsiden.php'>Om nettstedet</a> | <a href='pa_ommeg.php'>Om meg</a>"; if(!$_SESSION){ echo "<br/><br/>For tilgang til avgrensede områder <a href='pa_login.php?curi=$current_uri'>log på</a> eller <a href='pa_registrer.php'>registrer deg</a> som bruker<br/>"; } else { $profildata = sjekk_profildata($_SESSION['bruker'], $_SESSION['pass']); $medlemskap = sjekk_medlemskap($_SESSION['bruker']); echo " | <a href='pa_endre_passord.php'>Endre passord</a> | <a href='pa_logut.php'>Log ut</a>"; if($_SESSION['bruker'] == 'admin@popetersson.name') { echo " | <a href='pa_admin.php'>administrasjon</a>"; } echo "<br/><br/>Velkommen " . $profildata['fornavn'] . "<br/> Du har tilgang til følgende grupper: "; foreach($medlemskap as $value) { echo $value . " "; } echo "<br/>"; } ?> </body> </html> Lenke til kommentar
ze5400 Skrevet 23. januar 2011 Del Skrevet 23. januar 2011 Du starter outputen din før du starter sesjonen. index.php begynner å sende output tidligere enn det php trenger får å få slengt på sesjonsinfo i infoen (headers) som sendes til serveren Lenke til kommentar
PelleP Skrevet 23. januar 2011 Forfatter Del Skrevet 23. januar 2011 ze5400 skrev (På 23.1.2011 den 0.51): Du starter outputen din før du starter sesjonen. index.php begynner å sende output tidligere enn det php trenger får å få slengt på sesjonsinfo i infoen (headers) som sendes til serveren Jaha??? Om du kunne foreslå hva jeg skal gjøre for å løse problemet så kanskje jeg forstår mer... Lenke til kommentar
ze5400 Skrevet 23. januar 2011 Del Skrevet 23. januar 2011 (endret) Start sesjonen øverst i index.php istedenfor der du gjør nå, eller delay output inntil sesjonen startes. EDIT: Det å delaye output fra bufferen kan du gjøre med bruk av funksjonene ob_start()og ob_flush() Endret 23. januar 2011 av ze5400 Lenke til kommentar
PelleP Skrevet 23. januar 2011 Forfatter Del Skrevet 23. januar 2011 ze5400 skrev (På 23.1.2011 den 20.29): Start sesjonen øverst i index.php istedenfor der du gjør nå, eller delay output inntil sesjonen startes. EDIT: Det å delaye output fra bufferen kan du gjøre med bruk av funksjonene ob_start()og ob_flush() Jeg prøvde å endre index.php slik: <?php include_once 'pa_toptekst.php'; ?> Jeg får da følgende feilmelding: Sitat Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/1/p/popetersson/www/index.php:1) in /home/1/p/popetersson/www/pa_toptekst.php on line 2 Det betyr jo at output begynner med <?php, ikke sant!? Da kan det være det samme hvor jeg setter inn session_start(), ikke sant!? Jeg skal sjekke ob_start()og ob_flush() og se om det kan være løsningen. (Det vil nok ikke bli inatt) Lenke til kommentar
ze5400 Skrevet 23. januar 2011 Del Skrevet 23. januar 2011 Bare la ting stå slik det var, men sleng inn <?php ob_start(); ?> helt øverst i index.php. Det skal ordne det om jeg ikke tar helt feil. Lenke til kommentar
PelleP Skrevet 23. januar 2011 Forfatter Del Skrevet 23. januar 2011 YES!!! Det var sannelig god hjelp! Takker og bukker! Lenke til kommentar
TheClown Skrevet 24. januar 2011 Del Skrevet 24. januar 2011 <?php session_start();?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>Pelles avkrok</title> </head> <body> <?php include_once 'pa_toptekst.php'; ?> </body> </html> Også fjerner du session_start fra PHP-fila. Det vil gjøre at alt går mye fortere Og det er en bedre vane. Lenke til kommentar
ze5400 Skrevet 24. januar 2011 Del Skrevet 24. januar 2011 TheClown skrev (På 24.1.2011 den 11.25): Også fjerner du session_start fra PHP-fila. Det vil gjøre at alt går mye fortere Og det er en bedre vane. Det vil nok ikke gå fortere, med mindre man generer massive mengder data som sendes samtidig. Tar fryktelig lite tid å gjøre ferdig scriptet før man starter output. Men ja, jeg er enig i at det er god praksis å starte sesjonen (og sende andre headers) før man i det hele tatt begynner å tenke på hvilke data man skal sende. Lenke til kommentar
PelleP Skrevet 24. januar 2011 Forfatter Del Skrevet 24. januar 2011 Det som TheClown foreslår er vel rett å slett å droppe <?php ob_start() ?> helt først i indexfilen og heller legge <?php session_start();?>, og det må jeg da gjøre på alle filene? Jeg prøvde det og det fungerte det også bortsett fra at jeg på login.php får samme type feilmelding som tidligere grunnet linjen: header("location:" . $loginRedirect); Dersom noen er interessert så kan jeg legge inn mer kode, men inntil videre betrakter jeg problemet som løst og konsentrerer meg heller om andre problemer. Det er nok bryne seg på... Lenke til kommentar
ze5400 Skrevet 25. januar 2011 Del Skrevet 25. januar 2011 Bare betrakt problemet som løst med ob_start(). Er ingen vits i å forvirre deg mer enn nødvendig Men i fremtiden vil det nok være en fordel for deg å skille logikk og presentasjon bedre Men den tid, den sorg - et sted må man jo starte! Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå