"Date (): Il n'est pas sûr de se fier aux paramètres de fuseau horaire du système ..."

359

J'ai eu cette erreur lorsque j'ai demandé à mettre à jour la version PHP de 5.2.17 vers PHP 5.3.21 sur le serveur.

<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/New_York' for 'EDT/-4.0/DST' instead</p>
<p>Filename: libraries/Log.php</p>
<p>Line Number: 86</p>

</div>
Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/New_York' for 'EDT/-4.0/DST' instead in /filelocation right here/system/libraries/Log.php on line 86

Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/New_York' for 'EDT/-4.0/DST' instead in /filelocation right here/system/libraries/Log.php on line 99
<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/New_York' for 'EDT/-4.0/DST' instead</p>
<p>Filename: libraries/Log.php</p>
<p>Line Number: 99</p>

</div>
user1852837
la source

Réponses:

556

Vous devrez probablement mettre le fuseau horaire dans une ligne de configuration dans votre php.inifichier. Vous devriez avoir un bloc comme celui-ci dans votre fichier php.ini:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = America/New_York

Sinon, ajoutez-le (en remplaçant le fuseau horaire par le vôtre). Après la configuration, assurez-vous de redémarrer httpd ( service httpd restart).

Voici la liste des fuseaux horaires pris en charge .

CtrlX
la source
12
pour être clair, après avoir fait ce changement, assurez-vous de redémarrer le service sudo apache2
Ryan
2
Cela l'a résolu pour moi quand d'autres solutions ne l'ont pas fait. Je n'ai reçu cette erreur que lorsque j'ai utilisé les fonctions de date sur la même page que l'intégration avec Amazon SES. Peut-être que cela aidera quelqu'un d'autre.
master_gracey
9
Si vous utilisez PHP CLI (php -r ou php -a) dans votre terminal client, vous devez modifier le fichier php.ini CLI, pas apache2. Votre fichier php.ini CLI CLI se trouve généralement sur /etc/php5/cli/php.ini
justinpage le
2
Comme le premier commentaire sur Apache, vous devez également redémarrer IIS pour que cela prenne effet sur Windows / IIS.
jross
2
Cela résout mon problème! Juste une info pour les non-experts comme moi, afin de trouver celui php.iniutilisé par apache, il suffit d'exécuter la commande suivante php -i | grep php.ini.
Joël Salamin,
198

Si vous ne pouvez pas modifier votre configuration php.ini, vous pouvez également utiliser l'extrait de code suivant au début de votre code:

date_default_timezone_set('Africa/Lagos');//or change to whatever timezone you want

La liste des fuseaux horaires est disponible à l' adresse http://www.php.net/manual/en/timezones.php .

Babatunde Adeyemi
la source
7
Pour une raison quelconque, la définition de date.timezone = America / New_York dans mon php.ini et le redémarrage d'apache n'ont pas arrêté ce message d'erreur lors de l'exécution d'un script à l'aide de swiftmailer. J'ai fini par devoir également ajouter date_default_timezone_set ('America / New_York'); en haut du script comme suggéré. Merci!
kyle
J'ai essayé ta solution. Maintenant, l'erreur est une erreur de 500 serveurs internes. J'utilise apache 2.x et codeigniter.
Hafiz Shehbaz Ali
@ShehbazAli Vous devez avoir fait quelque chose de mal. Dans lequel de vos scripts avez-vous ajouté l'extrait?
Babatunde Adeyemi
le même code travaille sur la production. Il n'y a pas d'erreur. J'ai installé manuellement apache, php et MySQL sur la fenêtre 10. PHP, MySQL et Apache fonctionnent. Mais, ce projet donne une erreur.
Hafiz Shehbaz Ali
72

Ajoutez ce qui suit dans votre index.phpfichier. Je l'ai rencontré pour la première fois lorsque j'ai déplacé mon application de mon XAMPP serveur vers Apache 2.2 et PHP 5.4 ...

Je vous conseille de le faire dans votre index.phpfichier au lieu du php.inifichier.

if( ! ini_get('date.timezone') )
{
    date_default_timezone_set('GMT');
}
Justis Matotoka
la source
3
excellente solution lorsque vous n'avez pas nécessairement un accès complet au système, devinez que celle-ci est pour les personnes avec un accès limité ou avez besoin d'une solution plus robuste, et combinez cela avec l'édition du php.ini si vous le pouvez
aqm
18
<? print(gmdate("Y")); ?> 

au lieu de

<? print(date("Y")); ?>

travaillé pour moi (montre l'année en cours et ne montre plus le message d'erreur). (Merci à Chris ci-dessus)

Susan Taunton
la source
15

Si ce ne sont pas vos options

  • Modification php.ini.
  • Ajout d'un date_default_timezoneappel.

Au lieu de datevous pourriez utiliser gmdate.

J'ai utilisé gmdate( "Y" )quand j'avais besoin d'un an pour un extrait de copyright.

Chris
la source
14

Si vous utilisez CodeIgniter et ne pouvez pas modifier php.ini, j'ai ajouté ce qui suit au début de index.php:

date_default_timezone_set('GMT');
Jose
la source
Cela fonctionne pour moi, merci Jose pour votre aide. Cordialement, Sarim Ghani i-splendid.com
Sarim Shekhani
Cela fonctionne sur le php natif php.net/manual/en/function.date-default-timezone-set.php . TY, tu m'as mis sur la bonne voie. En relation voir la liste des fuseaux horaires pour la fonction ici php.net/manual/en/timezones.php
Louis Loudog Trottier
11

@Justis m'a indiqué la bonne direction, mais son code n'a pas fonctionné pour moi. Cela a:

// set the default timezone if not set at php.ini
if (!date_default_timezone_get('date.timezone')) {
    // insert here the default timezone
    date_default_timezone_set('America/New_York');
}

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

Cette solution n'est pas seulement pour ceux qui n'ont pas un accès complet au système. Il est nécessaire pour tout script lorsque vous le fournissez à quelqu'un d'autre que vous. Vous ne savez jamais sur quel serveur le script s'exécutera lorsque vous le distribuerez à quelqu'un d'autre.

John Linhart
la source
5

Ce problème me dérange depuis un certain temps car je tente d'injecter un script "createbucket.php" dans le compositeur et je continue à être informé que mon fuseau horaire est incorrect.

En fin de compte, la seule chose qui a résolu le problème était de: $ sudo nano /etc/php.ini

Rechercher le fuseau horaire

[Date]
; Defines the default timezone used by the date functions
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = UTC

Assurez-vous de retirer le ;

Enfin

$ sudo service httpd restart

Et vous serez prêt à partir :)

T0mmyKn1fe
la source
5

J'ai dû le mettre entre guillemets.

date_default_timezone_set("America/Los_Angeles"); // default time zone
acte nocturne
la source
Toujours pas de workie (sous Mac OSX), donc j'ai fini par tomber en panne et j'ai ajouté/etc/php.ini: date.timezone = America/Los_Angeles
MarkHu
3

Vous pouvez définir le fuseau horaire dans votre .htaccessfichier

php_value date.timezone UTC
Alexander Lindquist
la source
Cela devrait fonctionner dans le cas où php.ini renvoie toujours l'avertissement bien qu'il ait été défini (php 5.4. *). A travaillé pour moi.
Christian Bonato
2

En plus de définir la date.timezone = comme mentionné dans plusieurs réponses, j'ai trouvé une erreur dans le fichier php.ini qui l'empêchait d'accéder à la date.timezone. La façon dont je l'ai trouvé était en exécutant php à partir de la ligne de commande dans un terminal. cela a provoqué une erreur à signaler à la ligne 114. Dans mon cas, j'avais commenté un paramètre pour afficher les erreurs qui avaient '|' entre 2 valeurs. Ça ne lui plaisait pas. J'ai supprimé l'une des valeurs et le | et tout allait bien après ça

M Graham
la source
1

Une méthode simple pour deux fuseaux horaires.

<?php 
$date = new DateTime("2012-07-05 16:43:21", new DateTimeZone('Europe/Paris')); 

date_default_timezone_set('America/New_York'); 

echo date("Y-m-d h:iA", $date->format('U')); 

// 2012-07-05 10:43AM 
?>
Saurabh Chandra Patel
la source
1
<? date_default_timezone_set('Europe/Istanbul'); ?>

Pour php (ou votre emplacement).

Mehmet Şerif Çaçan
la source
0

Une solution rapide pendant que vous rectifiez les incompatibilités est de désactiver le rapport d'erreurs dans votre index.phpfichier:

Insérez la ligne ci-dessous dans votre index.php ci-dessousdefine( ‘_JEXEC’, 1 );

error_reporting( E_ERROR | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR |
E_COMPILE_WARNING );
Elise Oertli
la source
0

J'héberge mon compartiment EC2 et S3 dans la région us-west-2 (Oregon). Lorsque j'appelais $s3client->listBuckets()pour répertorier les compartiments existants dans mon php, je recevais une exception - "Uncaught exception 'Exception' with message 'DateTime::__construct(): It is not safe to rely on the system's timezone settings...". j'ai apporté les modifications ci-dessous pour le faire fonctionner. Partager ces détails au cas où quelqu'un serait confronté à un problème similaire et l'une des réponses ci-dessus n'a pas aidé.

  1. Sur la base de la documentation @ AWS Configuring Network Time Protocol (NTP) , j'ai confirmé que l'état du service ntpd est correct en exécutantntpstat commande. Si vous obtenez une erreur, ce lien vous aide à savoir ce qui ne va pas.
  2. Ouverture du fichier /etc/php.ini (certains peuvent l'avoir dans un chemin différent en fonction de la version de php installée) et a trouvé qu'il date.timezonen'était pas défini sur une valeur et qu'il était également commenté par défaut. J'ai commenté en supprimant ';' avant cette ligne et définissez sa valeur sur"UTC" et enregistré le fichier.
  3. Redémarrage des démons http et ntp à l'aide des commandes sudo service httpd restartet sudo service ntpd restart.

Après cela, je suis en mesure de répertorier les compartiments avec succès sans aucune exception. J'espère que cela t'aides.

Maruti C
la source
0

Si vous utilisez Plesk, essayez-le, d'abord, ouvrez les paramètres PHP, en bas de la page, changez date.timezone de DEFAULT en UTC.

entrez la description de l'image ici

entrez la description de l'image ici

Latief Anwar
la source
0

J'ai eu cette erreur en exécutant php-fpm dans une prison chroot. J'ai essayé de créer etc / php.ini et / usr / share / zoneinfo dans le répertoire chroot, mais cela n'a tout simplement pas fonctionné. J'ai même essayé d'étirer les démons php-fpm pour voir quel fichier ils manquaient - rien n'a sauté.

Donc, si Google vous amène ici parce que vous obtenez cette erreur lorsque vous utilisez php-fpm configuré pour chroot, vous pouvez probablement le corriger en ajoutant cette ligne /etc/php-fpm.d/www.confdans la section ENV:

env[TZ] = America/New_York

Un redémarrage php-fpm est normalement nécessaire pour qu'il prenne effet. J'espère que cela aide quelqu'un là-bas.

Don Law
la source
0

Dans mon cas particulier, j'ai configuré PHP pour utiliser PHP-FPM (FastCGI Process Manager). Lors de l'exécution à phpinfo()partir de CLI, j'ai vu le fuseau horaire correct que j'avais défini dans le php.ini, mais il était toujours incorrect dans le navigateur et provoquait l'échec de mon code. J'avais simplement besoin de redémarrer le php-fpmservice sur le serveur.

service rh-php56-php-fpm restart

Vous devrez peut-être également redémarrer le httpdservice si vous avez modifié lephp.ini

service httpd restart
EternalHour
la source
0

Cette réponse ci-dessus de CtrlX est la bonne réponse, mais elle peut ne pas fonctionner complètement. J'ai ajouté cette ligne à mon fichier php.ini :

date.timezone = "America/Los_Angeles"

mais cela n'a pas supprimé l'erreur PHP pour tous mes fichiers car certains de mes scripts PHP sont dans des sous-dossiers. J'ai donc dû éditer le fichier .htaccess pour configurer php.ini à utiliser de manière récursive (dans les sous-dossiers):

suphp_configpath /home/account_name/public_html

où nom_compte est le nom de votre compte cpanel et public_html est le dossier dans lequel se trouve votre fichier php.ini.

Jeff Baker
la source
0

Pour l'utilisateur docker: créez un fichier timezone.ini local dans votre projet, configurez la configuration dans docker-compose.yml,

    volumes:
        - "./docker/config/timezone.ini:/usr/local/etc/php/conf.d/timezone.ini"

timezone.ini

    date.timezone=Australia/Sydney
Jin
la source
0

Si vous n'avez pas accès au fichier php.ini, créez ou modifiez un .htaccessfichier à la racine de votre domaine ou sous et ajoutez ceci (généré par cpanel):

<IfModule mime_module>
AddType application/x-httpd-ea-php56 .php .php5 .phtml
</IfModule>

<IfModule php5_module>
php_value date.timezone "America/New_York"
</IfModule>

<IfModule lsapi_module>
php_value date.timezone "America/New_York"
</IfModule>
user3724176
la source
Veuillez ne pas utiliser de mots majuscules au cas où la convention de casse normale pourrait exprimer ce que vous voulez dire.
shizhen
0

Il existe deux options pour résoudre ce problème

Tout d'abord, changez dans le fichier php.ini et mettez le fuseau horaire par défaut

date.timezone = "America/New_York"

Une fois, vous avez défini le fuseau horaire dans php.ini redémarrez le serveur

Deuxièmement, modifiez le fuseau horaire affecté à l'exécution en fonction de vos besoins

date_default_timezone_set('America/New_York');
Nikunj K.
la source
-1

Dans votre page de connexion, mettez un code comme celui-ci en date_default_timezone_set("Africa/Johannesburg");fonction de votre emplacement actuel.

CuteDevIT
la source