Pendant le processus de développement à l'aide de PHP, la fonction setLocale () est souvent utilisée pour définir les paramètres régionaux et les paramètres régionaux du script. Il affecte les performances de formatage des dates, du temps, de la monnaie, etc. en modifiant l'environnement régional du programme. Mais parfois, les développeurs constateront que même si setLocale () est appelé, le résultat n'est pas efficace et les paramètres des paramètres régionaux ou des paramètres régionaux sont toujours affichés. Alors, quelle est la raison?
1. Introduction à la fonction setLocale ()
SetLocale () est une fonction intégrée PHP pour définir les paramètres régionaux actuels du programme. La syntaxe est la suivante:
<span><span><span class="hljs-title function_ invoke__">setlocale</span></span><span>(</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$category</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$locale</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> ...</span><span><span class="hljs-variable">$locales</span></span><span>): </span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-literal">false</span></span><span>
</span></span>
$ catégorie : spécifie la catégorie à définir, telle que LC_Time (format de temps), LC_MONETARY (format de devise), LC_NUMERIC (format numérique), LC_ALL (tous les paramètres).
$ Local : Spécifie le lieu à définir.
Valeur de retour: renvoie les paramètres régionaux actuels lorsqu'ils réussissent et renvoie faux lors de l'échec.
Par exemple, utilisez SetLocale () pour définir la région de la date et de l'heure au chinois:
<span><span><span class="hljs-title function_ invoke__">setlocale</span></span><span>(LC_TIME, </span><span><span class="hljs-string">'zh_CN.UTF-8'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">strftime</span></span><span>(</span><span><span class="hljs-string">"%A, %B %d, %Y"</span></span><span>);
</span></span>
L'intention de ce code est de définir le format de date sur le chinois, mais parfois on peut constater qu'après exécuter le code, le format chinois attendu n'apparaît pas.
2. Cause du problème: le système d'exploitation et les paramètres régionaux sont incompatibles
Lorsque SetLocale () ne parvient pas à prendre effet, la raison la plus courante est que le système d'exploitation n'installe pas ou ne prend pas en charge les paramètres régionaux correspondants. PHP détermine si un lieu spécifié peut être appliqué grâce au support de localisation du système d'exploitation, qui est généralement affecté par les paramètres du système d'exploitation.
Dans les systèmes Linux ou MacOS, le paramètre régional est généralement fourni par le package de support de localisation du système d'exploitation. Si le lieu appelé par PHP n'est pas installé dans le système d'exploitation, SetLocale () ne prendra pas effet. Par exemple, les paramètres régionaux de ZH_CN.UTF-8 peuvent ne pas être installés dans certains systèmes d'exploitation, ce qui fait passer PHP à passer à ce paramètre régional.
Vous pouvez utiliser la commande suivante pour vérifier les paramètres régionaux pris en charge par le système d'exploitation actuel:
Sur Linux, vous pouvez utiliser les paramètres de la commande -a pour afficher une liste de lieux pris en charge.
Sur MacOS, vous pouvez utiliser les paramètres régionaux -a ou afficher les fichiers linguistiques dans le répertoire / usr / share / local .
Si vous constatez qu'il manque un paramètre régional, vous pouvez essayer d'installer le package de langue via l'outil de gestion des packages du système d'exploitation. Par exemple, sur Ubuntu, vous pouvez installer le package de langue chinoise en utilisant la commande suivante:
<span><span>sudo apt-get install language-pack-zh-hans
</span></span>
Un autre problème possible est l'incompatibilité des caractéristiques. Par exemple, si votre système d'exploitation a installé la région de ZH_CN mais n'a pas le support de codage UTF-8 correspondant installé, ZH_CN.UTF-8 ne prendra pas effet. Dans ce cas, assurez-vous que la prise en charge du jeu de caractères correspondant est installée.
Dans certains environnements de serveur, PHP peut ne pas avoir la permission d'accéder à la configuration des paramètres régionaux du système d'exploitation. Par exemple, si vous exécutez PHP dans un conteneur Docker, vous pouvez rencontrer des fichiers régionaux manquants ou des problèmes d'autorisation. À l'heure actuelle, vous pouvez essayer de spécifier manuellement les paramètres régionaux dans le script PHP ou dans la configuration du serveur, ou modifier la configuration du conteneur pour installer la prise en charge des paramètres locaux manquants.
3. Comment résoudre le problème?
Vérifiez le lieu du système d'exploitation <br> Utilisez la commande des paramètres de la commande -a pour vérifier si le paramètre cible est pris en charge. S'il n'est pas pris en charge, vous devez installer le package de langage ou la prise en charge du jeu de caractères correspondant.
Configuration d'un lieu approprié <br> Lorsque vous utilisez SetLocale () dans PHP, assurez-vous que les paramètres régionaux sont cohérents avec les paramètres régionaux pris en charge par le système d'exploitation. Par exemple, ZH_CN.UTF-8 doit être cohérent avec les paramètres régionaux installés par le système d'exploitation.
Vérifiez la configuration PHP <br> Assurez-vous que les paramètres du fichier de configuration PHP ( php.ini ) ne restreignent pas ou n'empêchent pas SetLocale () de prendre effet, en particulier les paramètres liés à la configuration des paramètres régionaux.
Redémarrez le serveur <br> Dans certains cas, les modifications des paramètres régionaux nécessitent un redémarrage du serveur Web pour prendre effet. Vous pouvez essayer de redémarrer le service PHP-FPM, NGINX ou Apache.
4. Résumé
La fonction SetLocale () de PHP ne prend parfois pas effet, généralement parce que le système d'exploitation n'a pas installé ou prend en charge les paramètres régionaux spécifiés. La résolution de ce problème nécessite la vérification de la prise en charge des paramètres régionaux du système d'exploitation et la garantie que PHP peut accéder et appliquer ces paramètres. Si le système d'exploitation n'a pas de pack de langues pertinent, il peut être installé manuellement et appelé correctement dans PHP. De cette manière, le problème de SetLocale () invalide peut être résolu et le script s'exécute comme prévu.