web-dev-qa-db-fra.com

fuseau horaire par défaut php.ini vs date.timezone

Lorsque j'utilise la fonction date() de PHP sur deux serveurs différents, j'obtiens deux résultats différents, mais les deux serveurs doivent être identiques.

J'ai vérifié le fichier php.ini sur le serveur n ° 1, où l'heure est correcte, et il se présente comme suit:

date/time support                   enabled
"Olson" Timezone Database Version   0.system
Timezone Database                   internal
Default timezone                    America/Chicago

Directive        Local Value        Master Value
---------------------------------------------------
date.timezone    America/Chicago    America/Chicago

J'ai vérifié sur le serveur n ° 2 et il se présente comme suit:

date/time support                   enabled
"Olson" Timezone Database Version   0.system
Timezone Database                   internal
Default timezone                    UTC

Directive        Local Value        Master Value
---------------------------------------------------
date.timezone    America/Chicago    America/Chicago

La seule différence que je vois est la valeur "Fuseau horaire par défaut".

La date/heure des deux serveurs actuels s’affiche sous la forme:

Server #1: 10/23/2012 09:40:39
Server #2: 10/23/2012 14:40:39

J'ai confirmé que les deux serveurs utilisent le php.ini situé dans /etc et j'ai également effectué une recherche dans les deux répertoires Web à la place du lieu où le fuseau horaire pourrait être remplacé:

grep -r "date_default_timezone_set" *

Mais à cet égard, ils contiennent tous deux les mêmes fichiers avec les mêmes paramètres.

Le "fuseau horaire par défaut" est-il la cause de la différence de 5h? Si oui, comment puis-je le corriger?

METTRE À JOUR

Fichiers de configuration chargés.

Le serveur n ° 2 contient deux fichiers ini supplémentaires:

/etc/php.d/snmp.ini
/etc/php.d/apc.ini

php -i résultats.

Serveur n ° 1:

date/time support => enabled
"Olson" Timezone Database Version => 0.system
Timezone Database => internal
Default timezone => America/Chicago

Directive => Local Value => Master Value
date.timezone => America/Chicago => America/Chicago

Serveur n ° 2:

date/time support => enabled
"Olson" Timezone Database Version => 0.system
Timezone Database => internal
Default timezone => America/Chicago

Directive => Local Value => Master Value
date.timezone => America/Chicago => America/Chicago

Il est intéressant de noter ici que, pour une raison quelconque, le "fuseau horaire par défaut" ne correspond pas au serveur n ° 2 lorsqu’il est affiché via php -i par rapport à phpinfo() sur une page Web.

SOLUTION

Le problème était avec le CMS et ses plugins. Alors que les serveurs n ° 1 et n ° 2 avaient les mêmes fichiers et tout, il apparaît que les plugins ne sont pas chargés dans le même ordre sur chaque serveur, ce qui a permis au dernier plugin chargé de déterminer le fuseau horaire de mon script.

La raison pour laquelle php -i et phpinfo a différé est qu’après l’utilisation de date_default_timezone_set(), cela affecte ce que phpinfo() imprimera.

Le correctif consistait à m'assurer que je suis dans le fuseau horaire dans lequel je devais me rendre via date_default_timezone_set(). La raison pour laquelle cela ne fonctionnait pas pour moi avant de poster cette question était parce que je l'avais déclarée avant de charger quelques fichiers requis à partir du CMS, ce qui a probablement réinitialisé le fuseau horaire.

14
NightHawk

date() s'appuie sur le paramètre date.timezone INI. Etant donné que l’un est Chicago (CT) et l’autre UTC, c’est votre différence de 5 heures.

Je crois à partir de PHP> 5.2, vous devriez recevoir:

Avertissement PHP: inconnu: il n’est pas prudent de compter sur le fuseau horaire du système réglages. Vous êtes requis pour utiliser le paramètre date.timezone ou le fonction date_default_timezone_set ().

Je vous encourage à regarder le nouvel objet DateTime ou à utiliser le temps UTC comme conseillé par SDC.

11
Jason McCreary

Quelques points à vérifier:

  1. Vérifiez la valeur "Fichier de configuration chargé" dans votre sortie phpinfo () pour vous assurer que vous modifiez le fichier php.ini correct. (Cela m'a mordu plus d'une fois!)
  2. Lorsque vous regardez la sortie phpinfo (), vérifiez la ligne "Autres fichiers .ini analysés" pour voir si d’autres fichiers ini sont en cours d’analyse lors de l’exécution via votre serveur Web.
  3. date.Timezone peut être défini via la fonction ini_set. Avez-vous un code qui fait ça? Assurez-vous également de vérifier le code en cours d'exécution en raison du paramètre auto_prepend ini.
5
bradym

Voici le code:

[Date]
date.timezone = ('America/New_York')

date.default_latitude = 31.7667

date.default_longitude = 35.2333

date.sunrise_zenith = 90.583333

date.sunset_zenith = 90.583333

Il suffit de changer date.timezone = ('America/New_York') pour votre fuseau horaire souhaité.

La source .

2
Gizmozine

Si vous définissez la valeur date.timezone dans php.ini mais que cela ne fonctionne pas (c'est-à-dire que la valeur locale et la valeur principale sont différentes), vous devrez peut-être mettre à jour quelque chose comme ceci dans votre fichier de configuration Apache:

<IfModule mod_php5.c>
   php_value date.timezone "Europe/Paris"
</IfModule>

Pour le mod qui avait déjà supprimé la réponse ci-dessus: J'ai cherché des heures pour trouver cette solution. Ne supprimez pas une réponse simplement parce que vous pensez qu'il s'agit d'une réponse en double. 

1
paralaks

Utiliser Ubuntu 14.0 LTS Dans mon cas, le fuseau horaire par défaut a été défini dans:

/etc/php5/cli/php.ini

Je pourrais alors vérifier avec:

php -i | grep "fuseau horaire" 

1
aten

http://us.php.net/manual/en/function.date-default-timezone-get.php

L'environnement TZ a priorité sur la valeur par défaut de php.ini; c'est peut-être la raison pour laquelle. Vous pouvez résoudre ce problème en appelant explicitement date_default_timezone_set.

1
Willem van Duijn