switch pas pris en compte dans un if

  • Auteur de la discussion Auteur de la discussion Ramon
  • Date de début Date de début
Nouveau WRInaute
Bonjour,
j'ai un switch classique sur une variable pour affecter le mois en lettre plutôt qu'en chiffre qui fonctionne bien
Code:
$nommois = date('n', mktime(0,0,0,$_month, 1, $_year));
	$mois = $nommois;
		  switch ($mois)
		  {
			case "1":
			$mois = "Janvier";
			break;
			case "2":
			$mois = "Février";
			break;
}
je voudrai afficher les mois en fonction de la langue avec if
Code:
$nommois = date('n', mktime(0,0,0,$_month, 1, $_year));
	$mois = $nommois;
if($langue == 1)
{
		  switch ($mois)
		  {
			case "1":
			$mois = "Janvier";
			break;
			case "2":
			$mois = "Février";
			break;
}
}
là le mois se retrouve affiché en chiffre !
de même si je met le if dans case ou un autre switch imbriqué dans case.
Ça fait depuis hier que cherche sans résultat !

Merci pour votre aide.
Raymond
 
Nouveau WRInaute
Merci pour vos réponses.
Précision, mes connaissance PHP sont limités.
Dur a comprendre pour moi " Fais des dump de variable à chaque étape ".

setlocale() + strftime() semble pas adapté à ce que je recherche.

Mais vos remarques on été productive.
Ma variable déclaré en début de page X :
<?php $langue = 1; ?>
n'est pas prise en compte en l'intérieur de mon script inséré en include plus bas dans la page,
alors qu'elle fonctionne après l'include !
 
Nouveau WRInaute
UsagiYojimbo, merci d'avoir insisté.
J'ai mieux regardé et modifié mon code en fonction.
C'est super, tout est plus simple comme tu l'as dit.

e-kiwi, j'ai justement fait des echo $langue, comme je l'expliquais plus haut, $langue ne s'affiche pas dans le fichier inclu mais s'affiche bien en dehors de l'inclu.
Bon, je n'en ai plus besoin, mais j'aurai voulu savoir pourquoi, c'est vraiment étonnant pour moi.

Merci pour votre aide

Raymond
 
WRInaute impliqué
Attention à la fonction « setlocale ». Des problèmes peuvent survenir lors de l'utilisation de PHP en multi processus.
http://php.net/manual/fr/function.setlocale.php

En gros, si deux personnes visitent le site simultanément dans une langue différente, la dernière personne effectuant le « setlocale » impactera sur la première (dans certain cas, si deux processus différents travaillent). Une sorte de franglais :D

À oublier dans un site à fort trafic.
 
WRInaute accro
Blount a dit:
Attention à la fonction « setlocale ». Des problèmes peuvent survenir lors de l'utilisation de PHP en multi processus.
http://php.net/manual/fr/function.setlocale.php

En gros, si deux personnes visitent le site simultanément dans une langue différente, la dernière personne effectuant le « setlocale » impactera sur la première (dans certain cas, si deux processus différents travaillent). Une sorte de franglais :D

À oublier dans un site à fort trafic.

Le site ou la page ?
Si c'est la page, un système correct d'adressage devrait réduire quasiment à zéro le risque que deux personnes visitent simultanément la même page avec un paramétrage de langue différent, non ?
 
WRInaute impliqué
Marie-Aude a dit:
Blount a dit:
Attention à la fonction « setlocale ». Des problèmes peuvent survenir lors de l'utilisation de PHP en multi processus.
http://php.net/manual/fr/function.setlocale.php

En gros, si deux personnes visitent le site simultanément dans une langue différente, la dernière personne effectuant le « setlocale » impactera sur la première (dans certain cas, si deux processus différents travaillent). Une sorte de franglais :D

À oublier dans un site à fort trafic.

Le site ou la page ?
Si c'est la page, un système correct d'adressage devrait réduire quasiment à zéro le risque que deux personnes visitent simultanément la même page avec un paramétrage de langue différent, non ?

Cela va même au delà du site.
Si Apache est utilisé, il lance plusieurs processus pour traiter les requêtes.
Cela concerne tous les sites du serveur.

Maintenant ça mérite quelques testes.

Mais toutes les installations ne sont pas concernée. Par exemple, dans mes dépôts :
Code:
apache2-mpm-prefork            - Serveur HTTP Apache - modèle traditionnel « non-threaded »                     
apache2-mpm-worker            - Apache HTTP Server - high speed threaded model

Ici, apache2-mpm-worker sera concerné par le problème.

S'il y a des personnes qui s'y connaisse un peu plus, ce serait bien de donner votre avis ;)

Pour ma part, je travail régulièrement avec Zend Framework. Il corrige justement certain de ces problème (gettext par exemple, utilisant setlocale dans PHP, dans ZF, il doit être récrit).
 
WRInaute accro
tu colles que des bouts de scripts, impossible de déterminer le problème. si il faut tu es dans une fonction, tu remet à zéro quelquepart la variable, etc ...
 
Nouveau WRInaute
e-kiwi a dit:
tu colles que des bouts de scripts, impossible de déterminer le problème. si il faut tu es dans une fonction, tu remet à zéro quelquepart la variable, etc ...
Tu as raison, hier je me suis rendu compte que mon problème venais du fait que j'appelais la variable à l'intérieur d'une fonction :?
Y a t il un moyen de récupérer le résultat d'une variable à l'intérieur d'une fonction, ou c'est pas possible ?

Pour setlocale, ce n'ai pas pour le site en entier, je vais mettre <?php setlocale(LC_ALL, 'nl_NL'); ?> dans 4 pages en langue différente qui va appeler le fichier ou il y a strftime().
Quand ça sera en place, je vous dirai si ça rentre en conflit.
Raymond
 
Nouveau WRInaute
Marie-Aude a dit:
Blount a dit:
Attention à la fonction « setlocale ». Des problèmes peuvent survenir lors de l'utilisation de PHP en multi processus.
http://php.net/manual/fr/function.setlocale.php

En gros, si deux personnes visitent le site simultanément dans une langue différente, la dernière personne effectuant le « setlocale » impactera sur la première (dans certain cas, si deux processus différents travaillent). Une sorte de franglais :D

À oublier dans un site à fort trafic.

Le site ou la page ?
Si c'est la page, un système correct d'adressage devrait réduire quasiment à zéro le risque que deux personnes visitent simultanément la même page avec un paramétrage de langue différent, non ?

Après test, 2 connexions simultané n'a pas causé de souci.
 
Nouveau WRInaute
Ramon a dit:
Tu as raison, hier je me suis rendu compte que mon problème venais du fait que j'appelais la variable à l'intérieur d'une fonction :?
Y a t il un moyen de récupérer le résultat d'une variable à l'intérieur d'une fonction, ou c'est pas possible ?

Pour conclure, je n’avançais pas parce que je ne déclarais pas ma vavriable à l'intérieur de la fonction :
global $langue;

Merci à tous de m'avoir permis de finaliser mon script.

Raymond
 
WRInaute impliqué
Ramon a dit:
Marie-Aude a dit:
Blount a dit:
Attention à la fonction « setlocale ». Des problèmes peuvent survenir lors de l'utilisation de PHP en multi processus.
http://php.net/manual/fr/function.setlocale.php

En gros, si deux personnes visitent le site simultanément dans une langue différente, la dernière personne effectuant le « setlocale » impactera sur la première (dans certain cas, si deux processus différents travaillent). Une sorte de franglais :D

À oublier dans un site à fort trafic.

Le site ou la page ?
Si c'est la page, un système correct d'adressage devrait réduire quasiment à zéro le risque que deux personnes visitent simultanément la même page avec un paramétrage de langue différent, non ?

Après test, 2 connexions simultané n'a pas causé de souci.

Après quel test ?
Si ton test, c'est de lancer 2 requêtes « en même temps » dans un navigateur, ce n'est pas bon du tout.
Pour bien faire, il faudrait lancer les requêtes en temporisant avec « sleep » à certain endroit.

Tu as fait quoi comme test ?
 
Nouveau WRInaute
Blount a dit:
Après quel test ?
Si ton test, c'est de lancer 2 requêtes « en même temps » dans un navigateur, ce n'est pas bon du tout.
Pour bien faire, il faudrait lancer les requêtes en temporisant avec « sleep » à certain endroit.

Tu as fait quoi comme test ?

J'ai fat 2 requêtes en même temps sur 2 pc, navigateur différent, mais sur la même connexion !
 
WRInaute impliqué
Ramon a dit:
Blount a dit:
Après quel test ?
Si ton test, c'est de lancer 2 requêtes « en même temps » dans un navigateur, ce n'est pas bon du tout.
Pour bien faire, il faudrait lancer les requêtes en temporisant avec « sleep » à certain endroit.

Tu as fait quoi comme test ?

J'ai fat 2 requêtes en même temps sur 2 pc, navigateur différent, mais sur la même connexion !

Il est là le problème. Informatiquement parlant, « en même temps » ne veut rien dire.

Tu prends deux fichiers. Dans les deux, tu définis une locale différente.
Ensuite, dans un des deux, tu mets un "sleep(5)" juste après pour faire patienter 5 secondes. Ensuite, tu affiche une date avec « strftime("%A %d %B %Y", time()) ».
Tu lances ta première requête sur le fichier contenant le sleep, et tu lances ensuite le seconde.
 
Discussions similaires
Haut