[RESOLU] code sur le serveur est different de mon code local

Eléphanteau du PHP | 11 Messages

12 févr. 2012, 19:03

Bonjour, sur ma page en local j'ai le code suivant :

Code : Tout sélectionner

<?php session_start ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <title>Site de test HTML et langage PHP !</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" media="screen" type="text/css" title="Interface" href="css/style.css"/> </head> <body> <div id="global">
code de la page en ligne via le visualiseur du navigateur :

Code : Tout sélectionner

<br /> <b>Warning</b>: session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cookie - headers already sent by (output started at /mnt/154/sda/2/c/xavier.bkh/index.php:1) in <b>/mnt/154/sda/2/c/xavier.bkh/index.php</b> on line <b>2</b><br /> <br /> <b>Warning</b>: session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cache limiter - headers already sent (output started at /mnt/154/sda/2/c/xavier.bkh/index.php:1) in <b>/mnt/154/sda/2/c/xavier.bkh/index.php</b> on line <b>2</b><br /> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <title>Site de test HTML et langage PHP !</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" media="screen" type="text/css" title="Interface" href="css/style.css"/> </head> <body> <div id="global"> <div id="tete"><img src="http://xavier.bkh.free.fr/images/tete.gif" width="976" height="104" alt="entete" /></div> <div id="corps"> <div id="col1">
---------------------------------------

ces caractères bizarre étaient affiché sur le site avant que je mette le code php suivant :

Code : Tout sélectionner

<?php session_start(); ?>

j'aimerais savoir pourquoi mon code change comme ca après qu'il soit interpreté par le navigateur ??
Merci amicalement !!

ViPHP
ViPHP | 2287 Messages

12 févr. 2012, 19:13

Salut,

un petit coup de google pour apprendre que tu es victime du BOM : http://fr.wikipedia.org/wiki/Marque_d'ordre_des_octets

Il te faut (ré)enregistrer tes fichiers en UTF8 sans BOM.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphanteau du PHP | 11 Messages

12 févr. 2012, 19:22

merci pour cette reponse rapide, désolé je suis débutant en php, et j'ai malheureusement pas trouvé de réponse à ca !!
mais merci je vais tenter ca de suite !! ^^
par contre l'interpretation du navigateur qui traduit mon code session-start au debut et qui sort un code completement different lorsque je visite ma page et que je le visualise je ne sais pas d'ou cela provient ?
Amicalement !!

ViPHP
ViPHP | 2287 Messages

12 févr. 2012, 19:59

merci pour cette reponse rapide, désolé je suis débutant en php, et j'ai malheureusement pas trouvé de réponse à ca !!
mais merci je vais tenter ca de suite !! ^^
par contre l'interpretation du navigateur qui traduit mon code session-start au debut et qui sort un code completement different lorsque je visite ma page et que je le visualise je ne sais pas d'ou cela provient ?
Amicalement !!
Pas de souci, content d'avoir pu t'aider :) Par contre l'explication ne va pas être simple.

Ce que tu vois est un message d'erreur (ou plutôt un avertissement, ou warning) de php (lié à la fonction session_start). Cet avertissement se produit car session_start() s'appuie sur l'envoi d'un cookie au navigateur et a pour cela besoin d'accéder aux headers http de la page (informations qui sont échangées entre le client et le serveur AVANT l'envoi du contenu de la page), c'est pourquoi on résume souvent cette exigence technique en "il ne faut surtout rien afficher, pas même un seul caractère, avant d'appeler session_start()". Voir première note sur la page de manuel : http://fr.php.net/manual/fr/function.session-start.php

Le fait que l'avertissement se produise en ligne et pas en local t'indique qu'il y a des différences de configuration entre ton serveur en ligne et ton serveur local. Tu peux donc te pencher là-dessus en premier lieu si ça t'intrigue (et ça devrait :) ), particulièrement la configuration de php et du fichier php.ini.

Mais pourquoi ces warnings alors que tu n'as rien affiché avant d'appeler session_start() ? C'est parceque certains de tes fichiers ont été enregistrés au format UTF8 avec BOM. Le BOM est une petite information stockée au début d'un fichier texte (juste avant le texte donc) qui peut être mal comprise par certains programmes, en particulier par php qui ne le gère pas du tout. Il considère le BOM comme des caractères faisant partie de la page devant donc être affichés. Et comme le BOM est tout au début du fichier...

Voilà pour la longue explication. Le réenregistrement de tes fichiers en UTF8 sans BOM devrait tout régler. Mais pour bien faire pense aussi à passer en revue ta configuration PHP (fichier php.ini) pour une utilisation de développement (dans le but d'avoir un affichage maximal de tous les types d'erreur, via http://fr.php.net/manual/fr/errorfunc.c ... -reporting notamment).
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphanteau du PHP | 11 Messages

12 févr. 2012, 20:48

Merci,
je suis sur un serveur de chez free, serveur linux.
leur version du serveur php est le suivant : 443
je crois que pour mieux travailler je dois installer un serveur de même version non ?
j'utilise xamp pas sur que j'arrive a le trouver ds celle ci :/
la je suis un peu bloqué : j'ai renvoyé tt mes fichiers en utf8 sans BOM mais sans succes :/ :/
mes pages n'affiche plus les caractères spéciaux correctement (bon pour ca pas de pb, je change le codage de mon navigateur mais pour un novice ca ne fait pas jolie et pour qqun d'autre ca fait tt sauf soigné :/) j'espere pouvoir y remedier en changeant l'entete de mon site :/
sinon je patine un petit peu snif !! pour tt ces messages d'erreurs.

ViPHP
ViPHP | 2287 Messages

12 févr. 2012, 22:01

Merci,
je suis sur un serveur de chez free, serveur linux.
leur version du serveur php est le suivant : 443
je crois que pour mieux travailler je dois installer un serveur de même version non ?
j'utilise xamp pas sur que j'arrive a le trouver ds celle ci :/
Oui avoir la même version est l'idéal, mais j'ai comme un doute sur le fait que 443 soit le bon numéro :langue: Pour en être sûr il faut créer une page spéciale (que tu peux appeler phpinfo.php) dans laquelle tu mets juste ce code :
<?php phpinfo();
et ensuite tu consultes cette page avec ton navigateur. Et là tu auras le numéro de version de php, entre autres (+ toutes les options de configuration). (Et quand tu n'as plus besoin de cette page, n'oublie pas de la supprimer, tu pourras toujours la refaire plus tard).
la je suis un peu bloqué : j'ai renvoyé tt mes fichiers en utf8 sans BOM mais sans succes :/ :/
mes pages n'affiche plus les caractères spéciaux correctement (bon pour ca pas de pb, je change le codage de mon navigateur mais pour un novice ca ne fait pas jolie et pour qqun d'autre ca fait tt sauf soigné :/) j'espere pouvoir y remedier en changeant l'entete de mon site :/
sinon je patine un petit peu snif !! pour tt ces messages d'erreurs.
Il reste un petit quelquechose à faire pour passer ton site en UTF8 correct. Il va falloir remplacer, dans toutes les pages qui la contiennent, cette balise meta :
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
Par ceci :
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Ceci servant à indiquer au navigateur le charset utilisé dans la page :)

Et si tu as d'autres soucis ou si tu veux approfondir ces problèmes de charset, tu peux aussi aller voir ce tuto : faq-tutoriels/encodage-utf-t245062.html
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphanteau du PHP | 11 Messages

13 févr. 2012, 00:58

merci,
je vais essayer de voir ca en détaille !!
pour la fonction phpinfo(), oui je l'ai fait : PHP Version 4.4.3-dev
ils ont l'air d'avoir une version assez speciale mais bon, j'espère arriver a résoudre ce pb.
Merci pour tte ces infos : si ca fonctionne je passerai le status de ce sujet en résolu ;) !!
meci pour ces réponses rapide ainsi que pour les liens qui devraient m'apporter plus de renseignements.
amicalement ;) !!

ViPHP
ViPHP | 2287 Messages

13 févr. 2012, 01:41

merci,
je vais essayer de voir ca en détaille !!
pour la fonction phpinfo(), oui je l'ai fait : PHP Version 4.4.3-dev
ils ont l'air d'avoir une version assez speciale mais bon, j'espère arriver a résoudre ce pb.
C'est php4, effectivement c'est très vieux (2006... la préhistoire de l'informatique :D ).

Il me semble qu'il est possible de passer en php5 chez free, regarde bien l'aide chez eux (ou quelquepart sur ce forum) pour savoir comment faire (d'ailleurs voici le lien, si ça n'a pas changé depuis : gestion-serveur/free-passer-php-t248915-15.html#p310441 )
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphanteau du PHP | 11 Messages

13 févr. 2012, 13:06

merci pour tout ces eclaircissement, j'ai un autre probleme qui m'embete dans cette situation : j'utilise notepad++, et l'une des pages reste encodé en ANSI, après multe reconversion en utf-8 sans BOM et en enregistrant en vérifiant l'encodage avant, lors de la réouverture du fichier il est a nouveau en ANSI,
Peut on forcer l'encodage en utf-8 autrement sinon, est-ce que je peux laisser cet encodage ?

ViPHP
ViPHP | 2287 Messages

13 févr. 2012, 13:27

merci pour tout ces eclaircissement, j'ai un autre probleme qui m'embete dans cette situation : j'utilise notepad++, et l'une des pages reste encodé en ANSI, après multe reconversion en utf-8 sans BOM et en enregistrant en vérifiant l'encodage avant, lors de la réouverture du fichier il est a nouveau en ANSI,
Peut on forcer l'encodage en utf-8 autrement sinon, est-ce que je peux laisser cet encodage ?
Tu peux laisser. En fait concrètement, si le fichier ne contient ni accent ni caractères spéciaux, alors il sera 100% identique quel que soit l'encodage (et ton éditeur détecte alors ce qui l'arrange, ANSI dans ton cas) :)
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphanteau du PHP | 11 Messages

13 févr. 2012, 13:48

Merci, mais mon souci est toujours la :

Code : Tout sélectionner

<br /> <b>Warning</b>: session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cache limiter - headers already sent (output started at /mnt/154/sda/2/c/xavier.bkh/index.php:1) in <b>/mnt/154/sda/2/c/xavier.bkh/index.php</b> on line <b>2</b><br /> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
au lieu du code originel :

Code : Tout sélectionner

<?php session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
j'ai bien envoyé le code en format utf-8 sans bom mais ce changement de code avec tout ces messages d'erreur m'inquiete :/

ViPHP
ViPHP | 2287 Messages

13 févr. 2012, 14:14

Le message d'erreur que tu reçois est très clair :
<br />
<b>Warning</b>: session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cache limiter - headers already sent (output started at /mnt/154/sda/2/c/xavier.bkh/index.php:1) in <b>/mnt/154/sda/2/c/xavier.bkh/index.php</b> on line <b>2</b><br />
Soit il y a des caractères (espace, retour à la ligne... ?) avant la balise d'ouverture php ( <?php ), qu'il faut alors supprimer, soit tu as toujours du BOM qui traîne quelquepart :)
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphanteau du PHP | 11 Messages

13 févr. 2012, 15:16

pff, c'est angoissant, je n'arrive pas a voir ce qui cloche ds mon code :/
merci, je vais essayer de recréer une nouvelle page index faire des tests en esperant trouver ce qui ne va pas car je suis sur de ne pas avoir de code avant le

Code : Tout sélectionner

<?php
test avec la touche [home] et la touche [Suppr] pour être !!
et pour ce code perturbateur je ne sais pas comment le trouver :/
bon c'est sur reste le travail a taton lol, mais c'est plus long ;) !! bon je vais avoir besoin de beaucoup de courrage et j'espère trouver ce qui cloche au final !
encore merci.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

13 févr. 2012, 16:53

Un éditeur simple pour résoudre ton pb (je pense) => notepad++

Tu pourras regarder l'encodage qu'il t'indique ;)

Et si besoin le changer ;)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 11 Messages

13 févr. 2012, 18:13

merci pour tout ces eclaircissement, j'ai un autre probleme qui m'embete dans cette situation : j'utilise notepad++, et l'une des pages reste encodé en ANSI, après multe reconversion en utf-8 sans BOM et en enregistrant en vérifiant l'encodage avant, lors de la réouverture du fichier il est a nouveau en ANSI,
Peut on forcer l'encodage en utf-8 autrement sinon, est-ce que je peux laisser cet encodage ?
voilà ca ne change rien a mon pb :/