Cannot modify header information - headers already sent by

Cannot modify header information - headers already sent by - PHP - Programmation

Marsh Posté le 02-03-2021 à 17:36:26    

Salut !
 
Je suis en train de migrer des scripts d'un serveur/hébergeur à un autre serveur/hébergeur.
 
Ca n'est pas transparent, ça coince pas mal, mais j'avance.
 
Sauf là, je bloque.
 
Via un .sh j'appelle un fichier PHP qui génère une image. L'image est bien générée.
Mais j'ai ces 2 erreurs qui sortent dans le log :
 
"Cannot modify header information - headers already sent by"
 
D'après ce site : https://stackoverflow.com/questions [...] ror-in-php c'est parceque l'entête est écrit après le fichier (si j'ai bien compris).
J'ai donc modifié l'ordre des lignes à la fin du code, mais ça ne change rien, j'ai toujours les erreurs.
Et là, ça me dépasse.
 
Est-ce que quelqu'un aurai une idée svp ?
 
 
 
Le code initial finissait par :

Code :
  1. ...
  2. $heatmap->setImageFormat('jpeg');
  3. $heatmap->setImageCompressionQuality($quality);
  4. $file = $heatmap->getImageBlob();
  5. file_put_contents('/home/clients/ddd/www.ddd.com/www/dossier/'.$finalfilename, $file);
  6. if ($returnFileAtEnd){
  7.     header("Content-Type: image/jpeg" );
  8.     echo $file;
  9. }else{
  10.     $result = array();
  11.     $result['status'] = 'OK';
  12.     $result['GeneratedAt'] = date('Y-m-d H:i:s');
  13.     header("Content-Type: application/json" );
  14.     echo json_encode($result);
  15. }
  16. die();


 
 
 
 
Je l'ai modifié par :

Code :
  1. ...
  2. if ($returnFileAtEnd){
  3.     header("Content-Type: image/jpeg" );
  4.     echo $file;
  5. }else{
  6.     $result = array();
  7.     $result['status'] = 'OK';
  8.     $result['GeneratedAt'] = date('Y-m-d H:i:s');
  9.     header("Content-Type: application/json" );
  10.     echo json_encode($result);
  11. }
  12. die();
  13. $heatmap->setImageFormat('jpeg');
  14. $heatmap->setImageCompressionQuality($quality);
  15. $file = $heatmap->getImageBlob();
  16. file_put_contents('/home/clients/ddd/www.ddd.com/www/dossier/'.$finalfilename, $file);


 
mais pas mieux...
 
 
 
L'erreur complète est :

Citation :

PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/clients/ddd/www.ddd.com/www/dossier/mon-fichier.php:186) in /home/clients/ddd/www.ddd.com/www/dossier/mon-fichier.php on line 317
 
Warning: Cannot modify header information - headers already sent by (output started at /home/clients/ddd/www.ddd.com/www/dossier/mon-fichier.php:186) in /home/clients/ddd/www.ddd.com/www/dossier/mon-fichier.php on line 317


---------------
Vidéo Concorde Air France | www.kiva.org
Reply

Marsh Posté le 02-03-2021 à 17:36:26   

Reply

Marsh Posté le 02-03-2021 à 17:59:51    

Avant de poster, j'avais lu plein de trucs sur le net, et ça ne marchait pas.
 
Mais là apparemment j'ai trouvé la soluce : ajouter ceci ob_start();  après la ligne <?php
 
Je n'ai plus d'erreur !
 [:groody]


---------------
Vidéo Concorde Air France | www.kiva.org
Reply

Marsh Posté le 03-03-2021 à 14:34:30    

Bonjour,
 
Vérifier qu'il n'y ait pas de BOM en début de fichier, c'est typiquement le problème qui peut conduire à cet avertissement.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 03-03-2021 à 15:11:44    

Je ne sais pas ce que c'est, mais je vais chercher et tester.
Merci :)


---------------
Vidéo Concorde Air France | www.kiva.org
Reply

Marsh Posté le 03-03-2021 à 15:25:56    

D'après cette explication, mes fichiers sont pourtant ok (en UTF8)
https://www.hesk.com/knowledgebase/index.php?article=87
 
 
https://zupimages.net/up/21/09/xi0o.png


---------------
Vidéo Concorde Air France | www.kiva.org
Reply

Marsh Posté le 03-03-2021 à 17:59:20    

Sur quel fichier as-tu fait le test ? Celui que tu as modifié avec ob_start() ? Parce qu'il a pu être convertit lors de ta modification.

 

Après ce n'est pas forcément le BOM le problème, mais si ça fonctionnait avant c'est quand même le plus probable. Passes-tu d'une version de PHP à une autre ? Mais bon je vois mal une méthode mise à jour entre deux versions PHP qui se mettrait à envoyer un header qu'elle n'envoyait pas avant.

 

Sinon, le problème vient de tout ce qui peut précéder ton appel au header, or tu ne montres qu'une très courte partie du code.


Message édité par MaybeEijOrNot le 03-03-2021 à 17:59:38

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 06-03-2021 à 15:46:35    

Ca peut être un espace qui se trouve avant <?php en début de fichier ou alors un espace généré par une fonction qui ne fait pas son taf du fait du changement de serveur (et donc de version d'une lib).
 
Fait afficher toutes les erreurs de php pour ne rien rater.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 05-06-2021 à 00:16:43    

Bonjour,

 

c'est ton die(); qui crées l'erreur.  Remets   or die();

 

en fait die() permet de quitter moins que le script Php ; c'est comme 'cancel / ou 'abort' ... c'est une sorte de try / catch / finally { return false;}
il est fréquent lors de tentative de connection
if connect ....   or die() ; // pour l'exemple.

 


et quand ton script est executé , il atteint la ligne die();
et continue à lire le fichier de script ... puiqu'il reste quelques lignes après.

 

pour vraiment quitter l'execution d'une page de script , ou un ensemble de code : exit(true);  
en fait gardes  die()  , pour clore un appel d'une ressource interne.

 


et le "header already sent " provient de la création de ton objet, qui se prends die() dans le milieu ... la page est surement stampé à ce moment.
et avec les lignes après, le stamp reçoit une deuxième page , d'ou "header déjà envoyés",
header , c'est la requete http pour le retour vers le client, c'est plein d'infos .. dont cheksum , taille de la trame ... etc.

  

c'est le premier code ou je le vois utilisé tout seul.
pour un code migré , regardes la version de Php.
et aussi les états ON / OFF d'activation des options et modules.
phpinfo();
tu a peut être un module qui n'est pas chargé ...
tu peux activer les modules avec les variables d'environements.

    



Message édité par djinto le 05-06-2021 à 00:28:59
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed