login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Verschillende server instellingen (Opgelost)

Offline drie_elf - 06/09/2009 17:46 (laatste wijziging 06/09/2009 17:47)
Avatar van drie_elfNieuw lid Beste Site Masters

Ik heb deze vraag zojuist ook al gesteld, maar ik pas mijn vraag bij deze aan.

Het gaat om onderstaande

  1. <?
  2. include "hoofd.php";
  3. if(isset($_GET['p'])) {
  4. switch($_GET['p']) {
  5. case 'pagina1':
  6. include('submap/pagina1.php');
  7. break;
  8. case 'pagina2':
  9. include('pagina2.php');
  10. break;
  11. default:
  12. include('error/404.htm');
  13. }
  14. }
  15. else
  16. {
  17. include('home.php');
  18. }
  19. include "footer.php";
  20. ?>


Tot zover so good.

Op pagina2.php verwerk ik gegevens uit een formulier met PHP en stuur een
  1. header("Location: ?p=home");

erachteraan om terug te gaan naar de homepage

Op mijn eigen testserver werkt dit prima, ondanks dat verwerk.php wordt opgeroepen tussen hoofd.php en footer.php . (er staat dus html content voor de header, alleen niet op de pagina zelf, maar in de pagina die verwerk.php included)

Op de server van mijn klant werkt dit echter niet. Leuke foutmelding "Cannot modify header information blabla" omdat hij tekst ziet staan voor de header.

Mijn vraag: Waarom werkt dit op de ene server wel en de andere weer niet?

Mijn server draait met MySQL 5 en PHP 5

Kan het eventueel zijn dat PHP 4 moeilijk doet? (heb bij de klant al de vraag neergelegd welke PHP versie ze gebruiken)

Alvast bedankt voor het meedenken


Ruud

7 antwoorden

Gesponsorde links
Offline Martijn2008 - 06/09/2009 18:02
Avatar van Martijn2008 PHP beginner De php versie kun je opvragen met de volgende code:

  1. <?php echo phpinfo(); ?>


Misschien helpt het om aan het begin van jouw php script ob_start te zetten

  1. <?php
  2.  
  3. // de rest van jouw code
  4.  
  5. ?>
Offline NTS64 - 06/09/2009 18:48
Avatar van NTS64 PHP gevorderde Toon je code eens waarop je die header Location hebt staan?
Heb je echt niets van output toegevoegd, al is het maar een spatie of een linebreak buiten de PHP tags...
Offline drie_elf - 07/09/2009 13:24
Avatar van drie_elf Nieuw lid @woedie er staat niets dat kan ik je garanderen. Anders zou het op mijn eigen server ook niet werken toch?

@martijn is ob_start() niet afgeraden om te gebruiken? (ik weet niet of het werkt hoor, maar dacht zoiets gelezen te hebben)
Offline ArieMedia - 07/09/2009 15:31
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
drie_elf schreef:
@woedie er staat niets dat kan ik je garanderen. Anders zou het op mijn eigen server ook niet werken toch?

@martijn is ob_start() niet afgeraden om te gebruiken? (ik weet niet of het werkt hoor, maar dacht zoiets gelezen te hebben)
Met ob_start() buffer je de output, zoals er redelijk wat zeggen dat dit af te raden is zie ik het grote probleem niet :-)
Offline Koen - 07/09/2009 16:23
Avatar van Koen PHP expert Het gebruik van ob_* functies in deze situatie is inderdaad afgeraden. Met ob_start() buffer je de output alvorens ze naar het scherm te printen. Je ziet beginners vaak deze functie gebruiken om de foutmelding "cannot modify header information - headers already sent" te ontwijken, omdat je headers (dus ook cookies) alleen kan aanpassen wanneer er nog geen HTML output is verzonden naar de browser. Het gebruik van ob_start is in dit geval een (zeer slechte) oplossing voor dit probleem, wat wij ten zeerste afraden. Hiervoor zijn de ob_* functies niet ontworpen.

Output buffering slaat de uitvoer op in een interne buffer, waarna deze aan het einde van het script wordt verzonden naar de browser. Het opslaan van deze uitvoer moet zoveel mogelijk ontweken worden, simpelweg omdat dit onnodig veel geheugen en parsetijd in beslag neemt. De enige reden waarom je output buffering zou willen gebruiken is wanneer je (een deel van) de output wilt opslaan om er aanpassing aan te verrichten.

Structureer je scripts dus altijd op een manier dat je niet in aanraking komt met dit soort foutmeldingen. Dat wil zeggen dat je de PHP zo veel mogelijk moet uitvoeren voor enige output. (Opgelet: dit kan ook een witregel of een spatie zijn! Soms kan een editor die op een verkeerde charset staat ingesteld een onzichtbaar teken bovenaan je bestand meegeven, wat deze foutmelding ook kan veroorzaken. Als je dit niet weet kan je hier dus wel een tijdje achter gaan zoeken).
Offline drie_elf - 07/09/2009 17:10 (laatste wijziging 10/09/2009 11:25)
Avatar van drie_elf Nieuw lid Reactie van de hosting:

Ook includes genereren output. Een include wordt in PHP (ongeacht de configuratie) direct uitgevoerd en de output wordt (normaal gesproken) direct naar de client gestuurd.
Omdat op de test-server de output buffer globaal aan staat, gebeurt het daar niet.
Zoals ik al zei kun je op onze servers precies hetzelfde bereiken door bovenaan index.php ob_start() aan te roepen, en aan het einde ob_flush().
Offline Koen - 12/09/2009 10:09
Avatar van Koen PHP expert Dat is bullshit, je hosting zou zich moeten schamen. Waar zit je bij?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.227s