Pb Apache: pb avec éèùàê

Bonjour,

J'ai un soucis avec Apache:
j'ai deux environnements identique avec une différence:
le premier env: _ENV["LANG"]=fr_FR
le second env : _ENV["LANG"]=en_US

PHP 4.2.3
Apache 1.3.26

Avec mon applis PHP:
1er env:
je saisie "testé" (insertion base) et l'affichage de la liste donne "testé"
2nd env:
je saisie "testé" (insertion base) et l'affichage de la liste donne "test?"
(l'env 2 bouffe les accents éàèùê)

Je pense donc que mon problème viend de la langue du serveur.
Comment puis-je modifier la langue de mon deuxième environnement?

Je rame depuis plusieurs jours donc si vous avez une piste, une idée... Je prends!

Merci
Configuration: Windows XP
Internet Explorer 6.0

57 réponses

Résumé de la discussion

Le problème décrit concerne l'effet de la variable LANG sur deux environnements Apache, l'un configuré en fr_FR et l'autre en_US, ce qui entraîne l'affichage des caractères accentués dans le premier et corruption dans le second. Pour corriger, plusieurs conseils visent à vérifier l'environnement actif et à garantir que Apache démarre avec le LANG souhaité, par exemple via SetEnv LANG fr_FR dans la configuration. D'autres échanges soulignent que PHP peut hériter du LANG du processus lanceur et que des paramètres comme php.ini (default_charset) ou le jeu de caractères de la base influencent l'affichage. En cas d'environnement Windows XP, certains échanges soulignent aussi la cohérence entre la locale système et celle d'exécution et la nécessité de choisir ISO-8859-1 ou UTF-8 selon l'application.

Bobot (l’IA à votre service)
  1. Bonjour,

    @le_boss : merci pour le retour et le "déterrage"

    ceci m'intéresse au plus haut point. ^^
    1. Déterrage magistral, mais j'avais exactement le même problème et je l'ai résolu en ajoutant la ligne suivante au fichier de configuration d'apache (httpd.conf, dans mon cas):

      SetEnv NLS_LANG french_france.we8iso8859p1

      ...apache2 restart et ça roule.

      Si ça peut servir à d'autres...
      1. j'ai renvoyé cette m.... aux personnes responsables de cette bourde.

        ils vont se débrouiller avec.

        merci de votre aide.

        Je vous tiens informé.
        1. pour ma part, j'ai créé un script apache sous /etc/init.d:
          #Variables environnement ORACLE
          export ORACLE_BASE=/u01-client/app/oracle
          export ORACLE_HOME=$ORACLE_BASE/product/10.2.0
          export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
          export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:usr/lib:/usr/local/lib
          export NLS_LANG=french_france.WE8ISO8859P1
          export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
          export ORA_NLS10=$ORACLE_HOME/nls/data
          export ORA_NLS=french_france.WE8ISO8859P1
          
          DIR=/opt/apache2/bin
          CMD=$1
          
          #Execution de apachectl
          $DIR/apachectl $CMD
          


          à lancer par
          /etc/init.d/apache start
          1. Comment sait-on si apache a été lancé avec ce paramètre?

            manifestement il n'est pas présent ici.

            Comment puis-je relancer apache avec ce paramètre?
            c'est en le rajoutant dans httpd.conf? si oui quelle ligne dois-je ajouter?
            1. 54116 - A 0:00 /produits/xapach/put/prd/1.3.26a/bin/httpd -f
              /produits/xapach/put/prd/1.3.26a/conf/httpd.conf.q _=/produits/xapach/put/prd/1.3.26a/bin/httpd
              LANG=en_US LOGIN=root IMQCONFIGCL=/etc/IMNSearch/dbcshelp
              PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin
              LC__FASTMSG=true IMQCONFIGSRV=/etc/IMNSearch LOGNAME=root LOCPATH=/usr/lib/nls/loc USER=root AUTHSTATE=compat
              SHELL=/bin/ksh ODMDIR=/etc/objrepos HOME=/ TERM=dumb PWD=/ TZ=NFT-1DFT,M3.5.0,M10.5.0
              NLSPATH=/usr/lib/nls/msg/%L/%N:/usr/lib/nls/msg/%L/%N.cat
              1. J'ai fait un petit test chez moi.
                Je suis repassé en locale en_US, et le format de mes dates ne change pas.
                Je vois (message 10)
                je n'ai pas ces informations dans le phpinfo.php de l'env qui ne fonctionne pas:
                NLS_LANG= FRENCH_FRANCE.WE8ISO8859P15


                Es-tu sûr d'avoir lancé Apache avec ce paramètre? Pour en être sûr:
                ps -ef|grep httpd
                ps eww <un_des_PID_trouvés>
                


                Je pense que ton problème vient de là.
                1. $DATE_FLASH = $row['DATE_FLASH'][0];
                  ....
                  value="<?=$DATE_FLASH ?>"

                  l'affichage n'est jamais formaté (pour l'affichage).
                  d'où l'idée de langue anglaise quelque part
                  1. la donnée est correcte en base mais lors de l'affichage dans la page php le jour et mois sont inversés
                    1. Ici, ce n'est pas un problème PHP, vu que c'est du SQL.

                      car quand on affiche une date avec l'env KO le mois et la jour sont inversés
                      Je ne comprends pas bien non plus, car c'est toi qui formate la date dans ta requête SQL
                      1. je ne comprend pas ce que tu me demandes: "ordre php"

                        si c'est le source tu le retrouve dans le message numéro: 19
                        1. Bonjour,

                          Je pense qu'OCI n'est pas en cause, puisque php semble engendrer ton problème.
                          quelle est l'ordre php que tu utilises?
                          1. C'est peut-être une piste, mais le client OCI, je ne sais pas s'il est paramétrable.
                            Quand tu affiches la date (qui visiblement sort en format british), de quelle commande te sers-tu (shell, php, ...) ?
                            1. un autre point:

                              sur l'env KO
                              1. j'ai un serveur BackOffice avec du php pour mettre des infos dans la base
                              2. j'ai un serveur de base de données Oracle (machine physique différente)
                              3. j'ai un serveur FrontOffice le restitution des données en Java (machine physique différente)

                              le 2 et 3 fonctionne parfaitement et affiche les données que je leur donne

                              nous pensons que c'est le client OCI qui merde

                              Vous connaissez???
                              je peux refaire un topic pour repartir à zéro sur cette question d'OCI???
                              1. 1/ ça marche correctement!
                                ma base est sur un serveur différent

                                2/ je n'ai pas testé

                                J'ai fait le tour de la question avec un collegue et nous pensons qu'il y a un mauvais paramétrage OCI (genre en anglais) car quand on affiche une date avec l'env KO le mois et la jour sont inversés.
                                1. Bonjour,
                                  j'ai beau retourner le pb dans tous les sens, je pense que qqchose nous échappe.
                                  Je te propose 2 tests:

                                  1/ Connexion à ta base par sqlplus, et insérer une ligne (par la requête INSERT INTO) avec des données accentuées. Regarder le résultat. Si OK passer au test 2. Sinon, ça délire au niveau base (au fait, ta base est-elle située sur le même serveur?)

                                  2/ Exécute ton script d'insertion en BDD via php en ligne de commande, avec un user différent de wwwuser.
                                  Si résultat OK, le pb vient de Apache/php. Sinon, c'est bien php.
                                  1. env KO 120.92

                                    /> locale
                                    LANG=fr_FR
                                    LC_COLLATE="fr_FR"
                                    LC_CTYPE="fr_FR"
                                    LC_MONETARY="fr_FR"
                                    LC_NUMERIC="fr_FR"
                                    LC_TIME="fr_FR"
                                    LC_MESSAGES="fr_FR"
                                    LC_ALL=

                                    ------------------------------------
                                    env OK 151.191

                                    $ locale
                                    LANG=en_US
                                    LC_COLLATE="en_US"
                                    LC_CTYPE="en_US"
                                    LC_MONETARY="en_US"
                                    LC_NUMERIC="en_US"
                                    LC_TIME="en_US"
                                    LC_MESSAGES="en_US"
                                    LC_ALL=

                                    -------------------------------------------------------

                                    => la vérité est ailleur...
                                    • 1
                                    • 2
                                    • 3