login  Naam:   Wachtwoord: 
Registreer je!
 Forum

PHP 4

Offline Geerios - 05/05/2005 10:38
Avatar van GeeriosOnbekend Ik heb nu hosting met de nieuwste versie van PHP 4.
Nu heb ik mijn site daar geupload en nu geeft hij een fout.
Klopt het dat bij PHP 4 geen sessies werken?
Dit is de fout:
Citaat:
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/geer/domains/geendomein.co.uk/public_html/index.php:11) in /home/geer/domains/geendomein.co.uk/public_html/menu/index.php on line 2

Hoe kan ik dit veranderen?

Alvast bedankt, Geer

20 antwoorden

Gesponsorde links
Offline Legolas - 05/05/2005 10:39
Avatar van Legolas Onbekend voor de zoveelste keer: zet ob_start() bovenaan je pagina. helemaal bovenaan.
Offline burdy92 - 05/05/2005 10:41
Avatar van burdy92 HTML interesse ja...
ob_start(); bovenaan bij session_start();

en ob_end_flush(); helemaal onderaan je pagina!

wel zo:
  1. Hier je pagina!!!
  2. <? ob_end_flush(); ?>
Offline Legolas - 05/05/2005 10:44
Avatar van Legolas Onbekend ob_end_flush() is toch niet per se nodig??
met alleen ob_start() werkt het ook hoor
Offline Scott - 05/05/2005 10:46
Avatar van Scott Gouden medaille

PHP ver gevorderde
Jongens, als jullie naar Parijs gaan, vlieg je dan ook via New York ?!

Als je gewoon bovenaan de pagina session_start(); zet, ben je er ook vanaf en heb je het ook netjes opgelost...
Offline Legolas - 05/05/2005 10:48 (laatste wijziging 05/05/2005 10:48)
Avatar van Legolas Onbekend @Scott
Dat had ie toch al?
Daar gaf ie een foutmelding over
Het moet gewoon met ob_start() toch??:!:
Offline Fenrir - 05/05/2005 10:52
Avatar van Fenrir PHP expert Er staat mss een lege regel boven session_start?
Offline jopiegoekopi - 05/05/2005 11:00 (laatste wijziging 05/05/2005 11:00)
Avatar van jopiegoekopi Onbekend
Citaat:
Het moet gewoon met ob_start() toch??
daar is ob_start (output buffering) helemaal niet voor bedoeld. Het is een slordig truukje om er niet meer aan herinnerd te worden dat je script niet helemaal goed is.
Offline Legolas - 05/05/2005 11:02
Avatar van Legolas Onbekend Ow. dan zou je dus met error_reporting(0) hetzelfde kunnen bereiken als ob_start()?
Lijkt me:cool:
Offline Tuinstoel - 05/05/2005 11:06
Avatar van Tuinstoel PHP expert session_start(); moet helemaal bovenaan staan, dus boven de <html> tag anders krijg je 'n error, en ob_start(); lost alleen problemen met header("Location: ..."); op volgensmij.
Offline jopiegoekopi - 05/05/2005 11:07 (laatste wijziging 05/05/2005 11:10)
Avatar van jopiegoekopi Onbekend
Citaat:
Ow. dan zou je dus met error_reporting(0) hetzelfde kunnen bereiken als ob_start()?
Lijkt me
nee, want het is geen notice ofzo. Er gaat wel echt iets fout. met error_reporting(0) zie je er gewoon geen melding meer van. ob_start() zorgt dat het wel werkt, maar via een omweg. Het is gewoon heel slordig.
Citaat:
en ob_start(); lost alleen problemen met header("Location: ..."); op volgensmij.
het gaat hier ook om headers alleen niet om headers die je zelf stuurt.
ob_start() geeft het startsein voor het bufferen van output. Dat zorgt dus dat er niet steeds tussendoor output verstuurd wordt. Die output wordt gebufferd en die kun je met ob_get_contents() opvragen of met ob_end_flush() versturen. Dit laatste gebeurt ook automatisch aan het eind van je script als je er verder niks mee doet.
Offline zointer - 05/05/2005 11:09
Avatar van zointer HTML gevorderde Kan nu niemand meer zoeken

en als je gezocht hebt en je fout sta nergens post dan een stuk van de code dan moet er niet gesuggereerd worden
Offline jopiegoekopi - 05/05/2005 11:13
Avatar van jopiegoekopi Onbekend @zointer: bij de faq staat deze vraag ook (http://www.sitemasters.be/?pagina=faq/faq&cat=foutmeldingen#err_1), maar daar staan 2 foute oplossingen.
1. ob_start is dus fout
2. met een functie staat de code voor het verzenden van de header (of starten sessie want dat zorgt ook voor het versturen van een header) wel bovenaan in je bestand, maar de header wordt pas verstuurd als je de functie aanroept. Dan kan ergens middenin het script zijn na een paar echo's. Die oplossing slaat dus nergens op.
Offline Thomas - 05/05/2005 12:06
Avatar van Thomas Moderator session_start() bovenaan je pagina zetten is niet genoeg. Alle toekenningen aan $_SESSION moeten ook voor aanvang van je pagina gebeuren, tenzij je ob_start() gebruikt.

ob_start() is trouwens helemaal niet fout, alleen wordt deze functie soms te snel gebruikt. ob_start() sorteert je pagina op headers en "content" dus het gebruik hiervan zou een slordigere programmeerhouding kunnen bevorderen (het maakt niet meer uit waar je iets met $_SESSION of $_COOKIE doet, door ob_start() werkt het gewoon).
Het wordt natuurlijk wat anders wanneer je je in haast onmogelijke bochten moet wringen om alle header-gerelateerde zaken voor aanvang van je pagina af te handelen (denk bijvoorbeeld aan een login-scherm dat onderdeel uitmaakt van je navigatie (een login-include zeg maar)). Soms is het dan gewoon veel praktischer om ob_start() te gebruiken, en dat is ook wel 'algemeen geaccepteerd' denk ik. De programmeurs / scripters moeten er echter altijd voor waken dat hun scripts geen gigantische puinhopen worden.
Offline Fenrir - 05/05/2005 12:08
Avatar van Fenrir PHP expert Je kunt ook templates gebruiken, dan heb je zo'n probleem niet.

http://templatepower.codocad.com/
http://smarty.php.net/
Offline Legolas - 05/05/2005 12:08
Avatar van Legolas Onbekend @FangorN:
als ik je goed begrijp, is $_REQUEST['naam'] ook dus nogal slordig?
want dat maakt geen onderscheid tussen $_POST, $_GET en $_COOKIE.
Is dat zo?
Offline Thomas - 05/05/2005 13:08
Avatar van Thomas Moderator Het is niet "ook" slordig (ik zei nl. dat ob_start() niet (althans, niet per sé) slordig is) - het is alleen niet bepaald specifiek. Ik zou $_REQUEST niet gauw gebruiken denk ik, meestal ben je maar met één of twee van die speciale arrays bezig, dus spreek je die ook direct ($_POST, $_GET en/of $_COOKIE) aan. Ik zie het nut niet echt van $_REQUEST...
Offline timmie_loots - 05/05/2005 21:13
Avatar van timmie_loots PHP gevorderde
Citaat:
session_start() bovenaan je pagina zetten is niet genoeg. Alle toekenningen aan $_SESSION moeten ook voor aanvang van je pagina gebeuren, tenzij je ob_start() gebruikt.


Dat slaat dus helemaal nergens op..

  1. <?php session_start();
  2.  
  3. echo "iets";
  4.  
  5. $_SESSION['var'] = 'iets';
  6. ?>


zal gewoon werken.
Offline Geerios - 05/05/2005 21:22
Avatar van Geerios Onbekend Sorry maar ik had na de 1e reactie al antwoord (die van Legolas) en ik had eigenlijk meteen een reactie geven...
Offline jopiegoekopi - 05/05/2005 23:11 (laatste wijziging 05/05/2005 23:11)
Avatar van jopiegoekopi Onbekend
Citaat:
Dat slaat dus helemaal nergens op..
idd. bij de aanroep van session_start() wordt er een cookie (en dus header) verstuurd, dit moet dus voor de output.

bij het toekennen aan $_SESSION komt de waarde die je opgeeft gewoon in het geheugen en aan het eind van je script wordt de hele $_SESSION array serialized weggeschreven naar een bestand. (heeft dus geen invloed op headers/output.
Offline Thomas - 06/05/2005 10:22 (laatste wijziging 06/05/2005 10:32)
Avatar van Thomas Moderator Fijn dat dat tactloze "dat slaat helemaal nergens op" ook met feiten ondersteund wordt, anders zouden jullie helemaal als een stelletje boeren overkomen.

Je kan het natuurlijk ook anders brengen he ?

Het moet dus blijkbaar niet, maar het lijkt mij wel een nette gewoonte om alle toekenningen aan $_SESSION op één plaatst te zetten (bijvoorbeeld aan het begin van je pagina, omdat je (ik althans) daar meestal ook formulieren verwerkt die van invloed kunnen zijn op sessie-inhoud). Omdat ik dat altijd zo gedaan heb zal ik misschien gedacht hebben - my bad, maar omdat meteen zo neer te knuppelen... We maken allemaal wel eens fouten eh ?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.215s