J'ai easyphp 1.7 d'installé pour tester des scripts en local.
J'ai passé l'error_reporting à E_ALL et j'arrive pourtant à faire par exemple :
Code : Tout sélectionner
echo "test";
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
Est-ce normal?
Code : Tout sélectionner
echo "test";
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
Code : Tout sélectionner
echo "test";
session_start();
Code : Tout sélectionner
<?php
error_reporting(E_ALL);
echo error_reporting();
echo "avant > ".session_id()."<br>";
session_start();
echo "apres > ".session_id()."<br>";
?>
Quand cette directive n'est pas à "Off", l'output_buffering est automatique. C'est à dire que les entêtes HTTP et le contenu de la page ne sont envoyées que tout à la fin du script. Donc lorsque que tu fais "echo 'bidule';", les entêtes n'ont pas été envoyées, 'bidule' a simplement été ajouté au buffer, et l'appel à une fonction comme session_start() par la suite ne provoque donc pas l'erreur "headers already sent".; Output buffering allows you to send header lines (including cookies) even
; after you send body content, at the price of slowing PHP's output layer a
; bit. You can enable output buffering during runtime by calling the output
; buffering functions. You can also enable output buffering for all files by
; setting this directive to On. If you wish to limit the size of the buffer
; to a certain size - you can use a maximum number of bytes instead of 'On', as
; a value for this directive (e.g., output_buffering=4096).
output_buffering = Off
echo "truc"; // envoi des entêtes (content-type, etc...) + envoi de "truc".
echo "bidule"; // envoi de "bidule".
// fin du script
Avec output-buffering :
echo "truc"; // mise en buffer de "truc"
echo "bidule"; // mise en buffer de "bidule"
// fin du script + envoi des entêtes + envoi de "trucbidule"