Problème de variable de session

Problème de variable de session - PHP - Programmation

Marsh Posté le 08-06-2010 à 16:01:06    

Bonjour à tous,
 
Me voila enfin au bout du site internet que j'avais a réalisé. J'ai testé tout mon site en local il fonctionne parfaitement, seulement voila quand je met le site en ligne chez mon hébergeur (Arsys) et que je me rend sur la page d'accueil j'ai de message qui s'affiche:
 
 
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /var/www/vhost/arborescences.net/home/html/index.php:4) in /var/www/vhost/arborescences.net/home/html/wp-content/themes/greenie-10/header.php on line 2
 
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/vhost/arborescences.net/home/html/index.php:4) in /var/www/vhost/arborescences.net/home/html/wp-content/themes/greenie-10/header.php on line 2
 
Et ensuite mon site s'affiche mais mal, le CSS est mal pris en compte, etc.
Je ne sais absolument pas de quoi ça vient, je précise que j'utilise wordpress si ça a une importance quelconque...  :??:  
Si quelqu'un pouvait m'aider à comprendre le problème et me donner des pistes pour le résoudre  :ange:  
 
Merci d'avance :)

Reply

Marsh Posté le 08-06-2010 à 16:01:06   

Reply

Marsh Posté le 08-06-2010 à 16:39:47    

il doit y avoir un texte (ou un retour à la ligne) avant le session_start();


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 08-06-2010 à 17:00:10    

Visiblement non, en fait j'ai deux fichiers: un qui contient toute l'entete avec l'ouverture de session, et un qui contient la page web elle même et qui appelle le header.  
Voici le début du fichier header :
<?php
 session_start();
[...]
Et le début du fichier page:
<?php get_header(); ?>
[...]
 
Est ce que ça peut venir d'une incompréhension entre les deux pages à ce niveau... ou pas du tout?

Reply

Marsh Posté le 08-06-2010 à 17:03:31    

Salut,
Comme le dit ton message d'erreur :
- "headers already sent" (les headers ont déjà été transmis)  
- puis "output started at /var/www/vhost/arborescences.net/home/html/index.php:4" (la sortie a commencé dans index.php ligne 4)
 
Donc regarde ce qu'il y a dans ton index.php à la ligne 4, il doit y avoir soit un echo, soit du texte, ou un retour à la ligne en dehors de balises <?php ?>, qui du coup interdit l'utilisation du session_start() (qui exige que les headers n'aient pas déjà été transmis)
 
Bon courage

Reply

Marsh Posté le 08-06-2010 à 17:54:01    

même une tabulation (indentation) peut générer ce genre d'erreur

Reply

Marsh Posté le 08-06-2010 à 19:14:03    

s'il y a un include, et que dans ton include il y a envoi de données l'erreur se produit aussi.
cela pose problème si l'envoi est fait dans une fonction ou classe


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 09-06-2010 à 10:11:32    

J'ai regardé vos solutions, j'ai fait quelques modification en effet j'avais des tabulations, j'ai supprimé tout ça et j'ai toujours des erreurs:
 
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /var/www/vhost/arborescences.net/home/html/index.php:4) in /var/www/vhost/arborescences.net/home/html/wp-content/themes/greenie-10/header.php on line 1
 
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/vhost/arborescences.net/home/html/index.php:4) in /var/www/vhost/arborescences.net/home/html/wp-content/themes/greenie-10/header.php on line 1
 
La ligne 4 de mon index correspond à du js:
document.valeur.submit();
 
Une idée? ca me bloque tout cette histoire, en plus la valeur n'est pas transmise aux autres pages. Est ce que ca peut venir du serveur d'hébergement qui bloquerais la création de cookies ou un truc du genre?

Reply

Marsh Posté le 09-06-2010 à 10:15:30    

Elooodie a écrit :

J'ai regardé vos solutions, j'ai fait quelques modification en effet j'avais des tabulations, j'ai supprimé tout ça et j'ai toujours des erreurs:
 
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /var/www/vhost/arborescences.net/home/html/index.php:4) in /var/www/vhost/arborescences.net/home/html/wp-content/themes/greenie-10/header.php on line 1
 
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/vhost/arborescences.net/home/html/index.php:4) in /var/www/vhost/arborescences.net/home/html/wp-content/themes/greenie-10/header.php on line 1
 
La ligne 4 de mon index correspond à du js:
document.valeur.submit();
 
Une idée? ca me bloque tout cette histoire, en plus la valeur n'est pas transmise aux autres pages. Est ce que ca peut venir du serveur d'hébergement qui bloquerais la création de cookies ou un truc du genre?


Salut,
Comment ça du JS ?
Tu n'as pas le droit de transmettre du JS ou du HTML avant de faire un session_start. Le problème vient de là.
Montre nous le début du fichier index.php ce sera plus simple...
 
Bon courage

Reply

Marsh Posté le 09-06-2010 à 10:24:43    

Merci, en effet je viens de me rendre compte de ma boulette  :sweat:  
J'ai donc fait démarrer le session dans l'index:
 
<?php session_start(); ?>
<script type="text/javascript">
function myLoad() {
document.getElementById('resolution').value=screen.width;
document.valeur.submit(); }
</script>
 
et le début de mon header:
<?php
if(isset($_POST['resolution']) && !isset($_SESSION['resolution'])) {
$_SESSION['resolution'] = $_POST['resolution'];
}
?>
 
Alors là, le problème change, le message d'erreur s'affiche brievement sur l'index (brievement car la page recharge seule), mon site s'affiche presque correctement, mais quand je passe aux pages suivantes problème, j'ai l'impression qu'il n'y plus rien dans le $_SESSION['resolution']! :??:  
Je précise que ce header est chargé sur toutes les pages sauf l'index.

Reply

Marsh Posté le 09-06-2010 à 11:06:56    

Elooodie a écrit :

[...]
Alors là, le problème change, le message d'erreur s'affiche brievement sur l'index (brievement car la page recharge seule), mon site s'affiche presque correctement, mais quand je passe aux pages suivantes problème, j'ai l'impression qu'il n'y plus rien dans le $_SESSION['resolution']! :??:  
Je précise que ce header est chargé sur toutes les pages sauf l'index.


Houla c'est un peu confus tout ça :hebe:
 
"Le message d'erreur s'affiche brièvement sur l'index" => quel message d'erreur ? C'est peut-être lié à tes problèmes... Mets en commentaire ton document.valeur.submit() pour avoir le temps de noter le message.
 
"quand je passe aux pages suivantes il n'y a plus rien dans $_SESSION['resolution']" => est-ce que tu as refait un session_start ? Tant que session_start n'est pas fait, tu ne peux accéder au contenu du tableau $_SESSION

Reply

Marsh Posté le 09-06-2010 à 11:06:56   

Reply

Marsh Posté le 09-06-2010 à 11:22:22    

Alors, le message d'erreur sur l'index c'est le warning, les mêmes que j'ai cité plus haut, ils ont juste changé de pages, en fait ils se trouvent toujours sur la page où il y a le session_start().
Ensuite, non je n'avais pas refait session_start, je viens d'essayer et le problème est toujours le même et il me rajoute les warnings au dessus.
Je sais pas si je suis très claire je suis assez despespérée là lol

Reply

Marsh Posté le 09-06-2010 à 11:45:06    

Elooodie a écrit :

Alors, le message d'erreur sur l'index c'est le warning, les mêmes que j'ai cité plus haut, ils ont juste changé de pages, en fait ils se trouvent toujours sur la page où il y a le session_start().
Ensuite, non je n'avais pas refait session_start, je viens d'essayer et le problème est toujours le même et il me rajoute les warnings au dessus.
Je sais pas si je suis très claire je suis assez despespérée là lol


Bon on la refait moins stressé :)
 
1. Tu as ton fichier index dont le seul but apparemment est de récupérer la résolution de l'écran pour la transmettre en POST à la page suivante (j'imagine...). Donc déjà là tu n'as pas besoin de faire de session_start, puisque sur cette petite page d'index, tu n'accèderas pas à la session.
 
2. Ensuite tu arrives dans une 2e page, on va dire "page" (j'imagine... tu m'en as pas dit assez pour ça ;)). Je suppose que "page" commence par faire un include de "header". Avant de faire quoi que ce soit d'autre, pas de retour chariot, ni de tabulation.
 
3. Après donc on arrive dans le fichier "header" qui doit commencer par le session_start() avant de faire quoi que ce soit d'autre. Alors seulement tu peux te mettre à écrire et lire dans la session.
 
Est-ce que tu suis bien ce cheminement ? N'hésite pas à poster davantage de code (et d'utiliser les balises [code=php][/code])

Reply

Marsh Posté le 09-06-2010 à 11:56:11    

Tout d'abord merci de prendre de ton temps pour m'aider :)
 
Pour le 1. c'est bon j'ai supprimé le session_start()
Pour le 2. en effet dans ma page (une page classique avec du texte et photos qui présente une entreprise) je fais :

Code :
  1. <?php get_header(); ?>


C'est la toute première ligne, pas de retour chariot, espace, ni rien avant.
3. Le header commence bien par session_start :

Code :
  1. <?php session_start();
  2. if(isset($_POST['resolution']) && !isset($_SESSION['resolution'])) {
  3. $_SESSION['resolution'] = $_POST['resolution'];
  4. }
  5. ?>
  6.  
  7. <!DOCTYPE html PUBLIC[...]


J'ai regardé pas mal de posts d'utilisateurs qui avaient ce soucis et ils ont réussi à regler en supprimant les espaces etc. Moi ce n'est pas le cas. J'ai entendu parler des BOM, mais je ne vois pas à quoi ca correspond :/

Reply

Marsh Posté le 09-06-2010 à 12:02:06    

Elooodie a écrit :

Pour le 2. en effet dans ma page (une page classique avec du texte et photos qui présente une entreprise) je fais :

Code :
  1. <?php get_header(); ?>


C'est la toute première ligne, pas de retour chariot, espace, ni rien avant.


Y a un truc que je comprends pas dans ta page :
- tu appelles get_header() : c'est quoi cette fonction ? Elle est où ?
- tu fais pas include "header.php", comment le code peut faire pour arriver dans ton fichier header ?

Reply

Marsh Posté le 09-06-2010 à 12:07:00    

Alors get_header est une fonction prédéfinie dans wordpress qui me permet d'appeler le contenu du fichier header.php
Je n'ai jamais utilisé include ( je débute tu l'auras surement compris ^^ ), est ce que l'utiliser à la place du get_header pourrait résoudre le problème?
A savoir que visiblement le header est bien pris en compte puisque ma feuille de style fonctionne.

Reply

Marsh Posté le 09-06-2010 à 13:15:42    

Elooodie a écrit :

Alors get_header est une fonction prédéfinie dans wordpress qui me permet d'appeler le contenu du fichier header.php
Je n'ai jamais utilisé include ( je débute tu l'auras surement compris ^^ ), est ce que l'utiliser à la place du get_header pourrait résoudre le problème?
A savoir que visiblement le header est bien pris en compte puisque ma feuille de style fonctionne.


Je connais pas wordpress. Après recherche effectivement la fonction get_header() devrait faire ce que tu attends d'elle. Donc oublie l'histoire d'include..
Il doit y avoir un autre problème quelque part mais j'avoue que c'est pas facile de t'aider car tu donnes pas beaucoup d'infos ;)
 
Bon, histoire d'y voir un peu plus clair, on en est où là ? Décris exactement le comportement et le message d'erreur que tu vois.
Au pire, colle le code complet de tes fichiers pour que je puisse comprendre ce que t'essaies de faire.

Reply

Marsh Posté le 09-06-2010 à 16:42:50    

Merci pour toute ton aide, mais là j'arrivais pas à m'en sortir alors aux grands maux les grands remèdes.  :jap:  
 
En fait il s'agissait d'un script qui se lançait dans l'index pour détecter la résolution d'écran du visiteur et qui envoyait la valeur par formulaire à la page suivante qui en fait se trouve être la première page du site vu que le visiteur ne voit pas la première.
On m'avait demandé d'adapter la résolution du site en fonction de la résolution = à 800*600 ou supérieur, je n'avais pas réussi en CSS donc je m'étais lancé dans un truc un peu fouilli et compliqué.
 
Ne m'en sortant pas, j'ai viré tout ça, la résolution d'écran sera la même pour tous, après tout, quasiment personne n'utilise le 800*600 je vais pas passer des heures à me tuer à la tache pour ca :D

Reply

Marsh Posté le 09-06-2010 à 18:36:29    

Elooodie a écrit :

Merci pour toute ton aide, mais là j'arrivais pas à m'en sortir alors aux grands maux les grands remèdes.  :jap:  
 
En fait il s'agissait d'un script qui se lançait dans l'index pour détecter la résolution d'écran du visiteur et qui envoyait la valeur par formulaire à la page suivante qui en fait se trouve être la première page du site vu que le visiteur ne voit pas la première.
On m'avait demandé d'adapter la résolution du site en fonction de la résolution = à 800*600 ou supérieur, je n'avais pas réussi en CSS donc je m'étais lancé dans un truc un peu fouilli et compliqué.
 
Ne m'en sortant pas, j'ai viré tout ça, la résolution d'écran sera la même pour tous, après tout, quasiment personne n'utilise le 800*600 je vais pas passer des heures à me tuer à la tache pour ca :D


OK, c'est vrai que tu m'avais l'air partie dans une usine à gaz, comme on dit.. Tant mieux que tu puisses t'abstenir sur ce coup-là parce que c'était quand même pas super élégant de balancer la résolution au serveur via du javascript (bien que fonctionnel)
 
Bon courage pour la suite en tout cas !

Reply

Sujets relatifs:

Leave a Replay

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