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.
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.
Quelques points à vérifier:
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é.
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.
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"
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.