IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

session_start modifie variable [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre chevronné Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Par défaut session_start modifie variable
    Bonjour,

    J'ai un problème assez bizarre d'autant plus que c'est la première fois que ça me fait ça...

    En fait j'ai une variable "$nom_fichier" que je définie à une session. Seulement, ça me modifie le contenu de $nom_fichier juste après le session_start()...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
              echo 'avant session_start() : '.$nom_fichier.'<br /><br /><br />';//retourne "recueil_test.pdf"
              session_start();
               echo 'après session_start(): '.$nom_fichier.'<br />';//retourne "Recueil test"
              $_SESSION['autorisation'] = true;
              $_SESSION['id_fichier'] = $id_fichier;
              $_SESSION['nom_fichier'] = $nom_fichier;
    Et honnêtement, je ne vois pas d'où ça peut venir... Quelqu'un aurait-il une idée svp?

  2. #2
    Membre chevronné Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Par défaut
    Erreur de débutant. Mettre session_start() tout en haut de page...

  3. #3
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo 'avant session_start() : '.$nom_fichier.'<br /><br /><br />';//retourne "recueil_test.pdf"
    session_start();
    echo 'après session_start(): '.$nom_fichier.'<br />';//retourne "Recueil test"
    N'aurais tu pas la directive du php.ini register_global à ON ?
    Chose très fortement déconseillée.
    Cà à en tout l'air car la variable $nom_fichier (pour ce code) à été écrasée juste après le démarrage de la session, ce que provoque justement cette directive.

    Aussi, n'a tu pas eu l'erreur très répandue "Headers already sent by ..." du fait d'avoir fait un echo avant de démarrer la session ?

  4. #4
    Membre chevronné Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Par défaut
    Non, je n'ai pas registre_globals on

    ensuite si je n'ai pas eu de message à cause de echo avant session_start() c'est que j'utilise ob_start() / ob_end_flush() (bufferisation de sortie) ce que fait que la page est envoyée en une fois. Justement, ça compresse et evite d'avoir des erreurs de type header already sent.

  5. #5
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Citation Envoyé par radicaldreamer
    Non, je n'ai pas registre_globals on
    Alors le code d'exemple que tu as mis dans le 1er post n'était pas exactement comme ça, ça me parais impossible.

    Jamais $nom_fichier n'aurais dû changé de valeur, pas comme ça d'une ligne à l'autre, sinon d'être écrasé par quelque chose d'autre.
    Il y a forcément une explication, et ce n'est pas le fait de déplacer le session_start() si le register_global est bien à Off.

    Si tu remets comme c'était, donc avec l'erreur, ce phénomène cacherait quelque chose d'autre à mon sens, pas possible.


    Justement, ça compresse et evite d'avoir des erreurs de type header already sent.
    Chacun fait comme il veut, la dessus aucun problème.
    Mais à titre personnel, je préfère 100 fois avoir une erreur dû à l'envoie d'une entête trop top ou lié à une erreur, que de ne rien voir, rien savoir, au moins en phase de développement, modifs, améliorations, etc ...
    Après, en production, pourquoi pas.

  6. #6
    Membre chevronné Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Alors le code d'exemple que tu as mis dans le 1er post n'était pas exactement comme ça, ça me parais impossible.
    Je t'assure que si, mon code était tel quel et mon register_globals est bien à OFF.

  7. #7
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Je t'assure que si, mon code était tel quel et mon register_globals est bien à OFF.
    Admettons même que ce soit à Off.
    Ne trouve tu pas anormal que cette variable change de valeur alors que le seul et unique code qu'il y a entre les 2 echo est session_start() ?

    Pour ma part il y a un truc pas clair.
    C'est peut être lié à la bufferisation et de l'erreur que provoquerait le 1er echo, va savoir, mais ça me parait troublant quand même.

    Bon, c'est résolu, certes.
    Mais un essai comme ci-dessous, donc en revenant un peu comme au départ ne serait pas si inutile (au moins avoir une explication) :
    Test 1 : (sans provoquer d'erreur headers already send ...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    // avant session_start() :
    $nom_fichier_avant_1 = $nom_fichier;
    $nom_fichier_avant_2 = '';
    if (isset($_SESSION['nom_fichier'])) $nom_fichier_avant_2 = $_SESSION['nom_fichier'];
     
    session_start();
     
    echo 'Valeur avant : '.$nom_fichier_avant_1.'<br />';
    echo 'Valeur avant dans la session : '.$nom_fichier_avant_2.'<br />';
     
    echo 'Après : '.$nom_fichier.'<br />';
    echo 'register_globals : '.ini_get('register_globals').'<br />';
     
    exit(); // Point d'arrêt
    Test 2 : (avec erreur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    echo 'Avant 1 : '.$nom_fichier.'<br />';
    if (isset($_SESSION['nom_fichier'])) echo 'Avant 2 : '.$_SESSION['nom_fichier'].'';
    session_start();
     
    echo 'Après : '.$nom_fichier.'<br />';
    echo 'register_globals : '.ini_get('register_globals').'<br />';
     
    exit(); // Point d'arrêt
    Ensuite voir un peu ce qu'il se passe, il y a peut être moyen de détecter quelque chose.
    Maintenant, reste à voir si tu le temps de prospecter.


    D'ailleurs, faire un ob_start() / ob_end_flush() ne devrait pas empêcher de voir cette erreur du echo placer avant le session_start().
    Personnellement ça m'arrive d'en faire autant quand je débug, et l'erreur je l'ai quand même si tel est le cas.
    Je dirais plutôt que c'est le fait de mettre la directive output_buffering à On qui empêcherait d'avoir ce genre d'erreur, non ?
    Je ne sais plus trop, je ne bidouille pas ça tout le temps.

    Aussi, as tu bien le session.auto_start à 0 ?

  8. #8
    Membre chevronné Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Par défaut
    session.auto_start OFF
    J'ai pas trop le temps de prospecter. On me demande trop de chose en même temps au boulot. Et le soir, je suis sur d'autres projets persos en développement donc je vais (pour une fois) pas m'attarder à savoir d'où venait exactement cette erreur.

    Citation Envoyé par RunCodePhp
    Ne trouve tu pas anormal que cette variable change de valeur alors que le seul et unique code qu'il y a entre les 2 echo est session_start() ?
    En tout cas: si, je trouve ça bizarre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] modifier variable $_GET
    Par goldorax113 dans le forum Langage
    Réponses: 9
    Dernier message: 09/05/2007, 12h42
  2. Modifier variable dans une méthode
    Par dondano dans le forum Langage
    Réponses: 6
    Dernier message: 12/04/2007, 17h50
  3. Réponses: 3
    Dernier message: 13/04/2006, 22h55
  4. Modifier variable php suite à un clique
    Par budiste dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 29/11/2005, 17h06
  5. [D6] Modifier variable environnement système !?
    Par Lung dans le forum API, COM et SDKs
    Réponses: 32
    Dernier message: 19/05/2005, 20h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo