[PHP] Problemen CHDIR en Headers

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Om de een of andere vreemde reden krijg ik bij de volgende code in de map 'folder':
code:
1
2
3
4
<?
chdir('../');
include('includelist.php');
?>


De volgende foutmelding:
code:
1
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at ****/folder/text.php:1) in ***/includes/global.php on line 1


En dat terwijl als ik de volgende code in de map erboven plaats geen foutmelding krijg:
code:
1
2
3
<?
include('includelist.php');
?>


Ook wanneer ik de code bovenaan in de folder 'scripts' plaats is er geen probleem...

Acties:
  • 0 Henk 'm!

  • Padschild
  • Registratie: September 2004
  • Laatst online: 28-11-2020
Als ik me niets vergis dien je aan het begin van je code ob_start(); te zetten (helemaal aan het begin van al je PHP code. Aan het eind van al je PHP plaats je een ob_end_flush();.

Heeft te maken dat headers niet gestuurd kunnen worden, als ze al een keer gestuurd, headers moeten namelijk altijd bovenaan staan. Met de code die ik je geef wordt deze gebufferd en alle headers bovenaan geplaatst.

http://nl3.php.net/ob_start

Acties:
  • 0 Henk 'm!

Verwijderd

Er zit geen enter of ruimte achter de <? ?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

@padschild: Dat moet helemaal niet. Je voorstel is eerder symptoombestrijding. Met bufferen kun je inderdaad zorgen dat er geen output komt, omdat je deze eerst naar een buffer schrijft en pas later naar de output schrijft. Het probleem hierbij is dat je geheugengebruik toe gaat nemen en de responsiveness af kan nemen. Beter is om er gewoon voor te zorgen dat je al je header informatie al gestuurd hebt voor je aan je html begint.

Volgens de foutmelding wordt er op regel 1 van text.php al wat naar de client gestuurd. Bedenk dat dit op alles kan slaan. Ook newlines en spaties die buiten de php tags staan. Een ander veel voorkomende fout is de UTF order byte die sommige editors in je bestand zetten.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dankje, het was een UTF order byte :).

Acties:
  • 0 Henk 'm!

  • Padschild
  • Registratie: September 2004
  • Laatst online: 28-11-2020
Janoz schreef op woensdag 05 september 2007 @ 10:30:
@padschild: Dat moet helemaal niet. Je voorstel is eerder symptoombestrijding. Met bufferen kun je inderdaad zorgen dat er geen output komt, omdat je deze eerst naar een buffer schrijft en pas later naar de output schrijft. Het probleem hierbij is dat je geheugengebruik toe gaat nemen en de responsiveness af kan nemen. Beter is om er gewoon voor te zorgen dat je al je header informatie al gestuurd hebt voor je aan je html begint.
Okay, dat wist ik niet. Het klinkt natuurlijk logisch, omdat hij bufferd, sorry. Heb paar jaar terug last gehad van hetzelfde probleem (in sommige gevallen), waarbij ik het toendertijd zo opgelost heb. Ik wist dat het kon komen door ruimte voor de php tags, maar niet dat het kon komen door een 'UTF order byte'. Aangezien ik toen geen ruimte voor mijn php tags kon vinden, dacht ik dat dit de enige oplossing was :+. Nogmaals naar de TS toe, niet zo slim van mij :P

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Die Order byte is ook enorm nasty. Dat zijn dingen waar je twee ernstig gefrustreerde dagen kostbare ontwikkeltijd aan kwijt raakt en daarnaa nooit meer vergeet :)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1