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

PHP & Base de données Discussion :

Encodage SESSION / GLOBALE


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 25
    Par défaut Encodage SESSION / GLOBALE
    Bonjour, je déterre ce vieux topic car je "sèche" sur un problème complémentaire.

    En fait le my.cnf précise bien le bon charset (latin1).
    Mais sans effectuer de SET_NAMES latin1, ça ne fonctionne toujours pas.

    En fait le problème vient des variables de SESSION, mais je ne sais pas comment elles sont déterminées:

    SHOW SESSION VARIABLES like "char%";
    SHOW GLOBAL VARIABLES like "char%";
    Voilà ce que j'ai comme différences avec ces commandes
    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
    16
    17
    18
    19
    20
    21
    22
    23
        [character_set_client] => Array
            (
                [SESSION] => utf8
                [GLOBAL] => latin1
            )
    
        [character_set_connection] => Array
            (
                [SESSION] => utf8
                [GLOBAL] => latin1
            )
    
        [character_set_results] => Array
            (
                [SESSION] => utf8
                [GLOBAL] => latin1
            )
    
        [collation_connection] => Array
            (
                [SESSION] => utf8_general_ci
                [GLOBAL] => latin1_swedish_ci
            )
    Seulement voilà... impossible de trouver un quelconque "fichier de config" pour la session. Est-ce lié à la config de MySQL? PHP? Apache?...

    Merci d'avance pour ceux qui ont des infos sur le sujet.

    NB: pour info en cherchant, j'ai découvert la fonction PHP mysql_client_encoding() qui retourne utf8... mais ça ne m'avance pas plus.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    c'est tas connexion qui est comme ca, y'a un mysql_set_charset (ou autre) dans le coin ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 25
    Par défaut
    Bonsoir,

    y'a un mysql_set_charset (ou autre) dans le coin ?
    Non, pour mysql_set_charset, cette fonction n'est dispo que depuis 5.2.3 et les sites tournent avec la version 5.2.2 (j'aurais dû le préciser désolé).

    Je fais les tests sur un virtualhost créé pour ça... donc vierge de tout code. Il n'y a rien dans le .htaccess, et dans la page j'ouvre directement la connexion.

    Je ne sais pas si ça peut avoir un lien, mais d'après le phphinfo, je suis en mode CGI/FastCGI

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // SESSION
    character_set_client => utf8
    character_set_connection => utf8
    character_set_database => latin1
    character_set_results => utf8
    character_set_server => latin1
    character_set_system => utf8
    character_sets_dir => /usr/share/mysql/charsets/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // GLOBAL
    character_set_client => latin1
    character_set_connection => latin1
    character_set_database => latin1
    character_set_results => latin1
    character_set_server => latin1
    character_set_system => utf8
    character_sets_dir => /usr/share/mysql/charsets/

    Pour l'histoire il s'agit d'un serveur en local, assez vieux, et il y a toujours eu ce problème depuis que je suis arrivé. => pour les sites récents on utilise SET NAME, mais il y a beaucoup d'anciens sites (en latin1) avec des pb d'encodage (puisque charset SESSION en utf8). Pas très grave puisque c'est en local mais je me dis qu'il il doit bien y avoir une solution de ne pas écraser la conf. globale... (!)

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 25
    Par défaut
    J'ai essayé un AddHandler application/x-httpd-php dans un htaccess, il passe bien en Apache 2.0 Handler (PHP 4.4.8) mais toujours les mêmes infos de connexion.

    [Edit] Voilà ce qu'on peut lire dans la doc php.net de la fonction mysql-client-encoding...

    Unfortuantely the PHP mysql_connect() function does not use MySQL options files so this is not a sollution for changing the default connection character set for mysqlclient library v4.1+.

    The only working sollution remains:

    mysql_query("SET NAMES utf8", $conn);

    (of course /ext/mysql/php_mysql.c can always be patched ;] )
    ca me paraît bizarre... ça voudrait dire qu'il n'y a pas de solution "globale" en passant par un fichier de config? Qu'il faudrait recompiler PHP ?

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    mysql_* est une veilel extension, mais mysqli le fait

    mais c'est pas par défaut puisque en cas de connexion distant ça ne marcherait pas,
    de tout facon tu doit toujours utilise le SET NAMES ou mysql_set_charset (ou autre avec mysqli, PDO)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 25
    Par défaut
    J'ai trouvé d'où venait le problème,

    Il faut ajouter dans my.cnf:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [mysqld]
    init-connect = 'SET NAMES latin1'
    et créer un utilisateur spécifique avec des droits restreints (ne fonctionne pas avec root)

    => la connexion se fait bien en latin1

Discussions similaires

  1. Variable de session globales à tous les visiteurs
    Par Seb33300 dans le forum Langage
    Réponses: 8
    Dernier message: 13/08/2009, 17h06
  2. Scope session global
    Par totti dans le forum Struts 1
    Réponses: 1
    Dernier message: 20/12/2008, 13h46
  3. Session Globale en PHP
    Par keaton7 dans le forum Langage
    Réponses: 6
    Dernier message: 14/11/2008, 22h33
  4. Réponses: 1
    Dernier message: 16/04/2007, 17h43
  5. Variable de session globale
    Par cbroissa dans le forum Langage
    Réponses: 1
    Dernier message: 09/10/2006, 15h14

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