"Date (): non è sicuro fare affidamento sulle impostazioni del fuso orario del sistema ..."


359

Ho ricevuto questo errore quando ho richiesto di aggiornare la versione di PHP da 5.2.17 a PHP 5.3.21 sul server.

<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>

Risposte:


556

Probabilmente devi inserire il fuso orario in una riga di configurazione nel tuo php.inifile. Dovresti avere un blocco come questo nel tuo file php.ini:

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

In caso contrario, aggiungilo (sostituendo il fuso orario con il tuo). Dopo la configurazione, assicurarsi di riavviare httpd ( service httpd restart).

Ecco l' elenco dei fusi orari supportati .


12
per essere chiari, dopo aver apportato questa modifica, assicurati di riavviare il servizio apache2 riavvio
Ryan

2
Questo mi ha risolto quando altre soluzioni no. Ho ricevuto questo errore solo quando ho utilizzato le funzioni di data nella stessa pagina dell'integrazione con Amazon SES. Forse questo aiuterà qualcun altro.
master_gracey,

9
Se si utilizza l'interfaccia della riga di comando PHP (php -r o php -a) all'interno del terminale client, è necessario modificare il file php.ini della CLI, non apache2. Il file php.ini della CLI della CL di solito si trova in /etc/php5/cli/php.ini
justinpage

2
Come il primo commento su Apache, è necessario riavviare IIS affinché questo abbia effetto su Windows / IIS.
jross,

2
Questo risolve il mio problema! Solo un'informazione per i non esperti come me, per trovare l' php.iniusato da apache, basta eseguire il seguente comando php -i | grep php.ini.
Joël Salamin,

198

Se non riesci a modificare la configurazione di php.ini, puoi anche usare il seguente frammento all'inizio del codice:

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

L'elenco dei fusi orari è disponibile all'indirizzo http://www.php.net/manual/en/timezones.php .


7
Per qualche motivo, impostare date.timezone = America / New_York nel mio php.ini e riavviare apache non ha fermato questo messaggio di errore durante l'esecuzione di uno script usando swiftmailer. Ho anche dovuto aggiungere date_default_timezone_set ('America / New_York'); nella parte superiore della sceneggiatura come suggerito. Grazie!
Kyle,

Ho provato la tua soluzione. Ora, l'errore è 500 errore interno del server. Sto usando apache 2.xe codeigniter.
Hafiz Shehbaz Ali,

@ShehbazAli Devi aver fatto qualcosa di sbagliato. In quale dei tuoi script hai aggiunto lo snippet?
Babatunde Adeyemi,

lo stesso codice sta lavorando alla produzione. Non ci sono errori Ho installato manualmente apache, php e MySQL nella finestra 10. PHP, MySQL e Apache funzionano. Ma questo progetto sta dando errori.
Hafiz Shehbaz Ali,

72

Aggiungi quanto segue nel tuo index.phpfile. Mi sono imbattuto per la prima volta quando ho spostato la mia applicazione dal mio server XAMPP ad Apache 2.2 e PHP 5.4 ...

Ti consiglierei di farlo nel tuo index.phpfile anziché nel php.inifile.

if( ! ini_get('date.timezone') )
{
    date_default_timezone_set('GMT');
}

3
soluzione eccellente per quando non si dispone necessariamente dell'accesso completo al sistema, supponiamo che questo sia per le persone con accesso limitato o necessiti di una soluzione più solida, e combinando questo con la modifica di php.ini se puoi
aqm

18
<? print(gmdate("Y")); ?> 

invece di

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

ha funzionato per me (mostra l'anno in corso e non mostra più il messaggio di errore). (Grazie a Chris sopra)


15

Se queste non sono le tue opzioni

  • Modifica php.ini.
  • Aggiunta di una date_default_timezonechiamata.

Invece di datete potresti usare gmdate.

Ho usato gmdate( "Y" )quando avevo bisogno di un anno per uno snipplet di copyright.


14

Se stai usando CodeIgniter e non riesci a modificare php.ini, ho aggiunto quanto segue all'inizio di index.php:

date_default_timezone_set('GMT');

Funziona per me, grazie Jose per il tuo aiuto. Cordiali saluti, Sarim Ghani i-splendid.com
Sarim Shekhani

Funziona su php nativo php.net/manual/en/function.date-default-timezone-set.php . TY, mi hai messo sulla strada giusta. In relazione, vedi l'elenco dei fusi orari per la funzione qui php.net/manual/en/timezones.php
Louis Loudog Trottier,


11

@Justis mi ha indicato la giusta direzione, ma il suo codice non ha funzionato per me. Questo ha fatto:

// 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');
}

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

Questa soluzione non è solo per coloro che non hanno pieno accesso al sistema. È necessario per qualsiasi script quando lo fornisci a chiunque tranne te. Non si sa mai su quale server verrà eseguito lo script quando lo si distribuisce a qualcun altro.


5

Questo problema mi ha infastidito per un po 'di tempo mentre sto cercando di iniettare uno script "createbucket.php" nel compositore e continuo a dirmi che il mio fuso orario non è corretto.

Alla fine l'unica cosa che ha risolto il problema era: $ sudo nano /etc/php.ini

Cerca fuso orario

[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

Assicurarsi di rimuovere il ;

Quindi finalmente

$ sudo service httpd restart

E sarai a posto :)


5

Ho dovuto metterlo tra virgolette doppie.

date_default_timezone_set("America/Los_Angeles"); // default time zone

Ancora niente lavoro (in Mac OSX), quindi alla fine mi sono rotto e aggiunto/etc/php.ini: date.timezone = America/Los_Angeles
MarkHu,

3

È possibile impostare il fuso orario nel .htaccessfile

php_value date.timezone UTC

Questo dovrebbe funzionare nel caso in cui php.ini restituisca comunque l'avviso nonostante sia stato impostato (php 5.4. *). Ha funzionato per me.
Christian Bonato,

2

Oltre a impostare date.timezone = come menzionato in diverse risposte, ho trovato un errore nel file php.ini che gli impediva di accedere a date.timezone. Il modo in cui l'ho trovato è stato eseguendo php dalla riga di comando in un terminale. ciò ha causato la segnalazione di un errore alla riga 114. Nel mio caso avevo decommentato un'impostazione per la visualizzazione degli errori che avevano "|" tra 2 valori. Non gli è piaciuto. Ho rimosso uno dei valori e il | e dopo tutto è andato bene


1

Un metodo semplice per due fusi orari.

<?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 
?>


0

Una soluzione rapida mentre si correggono le incompatibilità è disabilitare la segnalazione degli errori nel index.phpfile:

Inserisci la riga in basso nel tuo index.php in bassodefine( ‘_JEXEC’, 1 );

error_reporting( E_ERROR | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR |
E_COMPILE_WARNING );

0

Sto ospitando il mio bucket EC2 e S3 nella regione us-west-2 (Oregon). Quando stavo chiamando $s3client->listBuckets()per elencare i bucket esistenti nel mio php, stavo ricevendo un'eccezione: "Uncaught exception 'Exception' with message 'DateTime::__construct(): It is not safe to rely on the system's timezone settings...". ho apportato le modifiche seguenti per farlo funzionare. Condividere questi dettagli nel caso in cui qualcuno si trovi ad affrontare un problema simile e una qualsiasi delle risposte di cui sopra non ha aiutato.

  1. Sulla base della documentazione @ AWS Configuring Network Time Protocol (NTP) , ho confermato che lo stato del servizio ntpd funziona correttamententpstat comando. Se ricevi un errore, questo link ti aiuta a sapere cosa non va.
  2. Ha aperto il file /etc/php.ini (alcuni potrebbero averlo in un percorso diverso in base alla versione di php installata) e ha scoperto che date.timezonenon era impostato su alcun valore e inoltre è stato commentato per impostazione predefinita. Non ho commentato rimuovendo ';' prima di questa riga e impostarne il valore "UTC"e il file salvato.
  3. Demoni http e ntp riavviati usando sudo service httpd restarte sudo service ntpd restartcomandi.

Dopo questo sono in grado di elencare i bucket con successo senza alcuna eccezione. Spero che sia di aiuto.


0

Se stai usando Plesk, provalo, per prima cosa, apri Impostazioni PHP, in fondo alla pagina, cambia date.timezone da DEFAULT a UTC.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


0

Ho riscontrato questo errore durante l'esecuzione di php-fpm in un carcere chroot. Ho provato a creare etc / php.ini e / usr / share / zoneinfo nella directory chroot, ma non ha funzionato. Ho anche provato a rintracciare i demoni php-fpm per vedere quale file mancava - non è saltato fuori nulla.

Quindi nel caso in cui Google ti porti qui perché ricevi questo errore quando usi php-fpm configurato per chroot, puoi probabilmente risolverlo aggiungendo questa linea /etc/php-fpm.d/www.confnella sezione ENV:

env[TZ] = America/New_York

Un riavvio php-fpm è normalmente richiesto per rendere effettivo. Spero che questo aiuti qualcuno là fuori.


0

Nel mio caso particolare, ho PHP configurato per utilizzare PHP-FPM (FastCGI Process Manager). Durante l'esecuzione phpinfo()dalla CLI ho visto il fuso orario corretto che avevo impostato in php.ini, tuttavia era ancora errato nel browser e causava il fallimento del mio codice. Avevo semplicemente bisogno di riavviare il php-fpmservizio sul server.

service rh-php56-php-fpm restart

Potrebbe anche essere necessario riavviare il httpdservizio se è stato modificatophp.ini

service httpd restart

0

Questa risposta sopra da CtrlX è la risposta corretta, ma potrebbe non funzionare completamente. Ho aggiunto questa riga al mio file php.ini :

date.timezone = "America/Los_Angeles"

ma non ha rimosso l'errore PHP per tutti i miei file perché alcuni dei miei script PHP sono nelle sottocartelle. Quindi ho dovuto modificare il file .htaccess per configurare php.ini da usare in modo ricorsivo (nelle sottocartelle):

suphp_configpath /home/account_name/public_html

dove nome_account è il nome dell'account del tuo pannello e public_html è la cartella in cui si trova il tuo file php.ini.


0

Per l'utente docker: creare un file timezone.ini locale nel progetto, impostare la configurazione in docker-compose.yml,

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

timezone.ini

    date.timezone=Australia/Sydney

0

Se non hai accesso al file php.ini, crea o modifica un .htaccessfile nella radice del tuo dominio o sub e aggiungi questo (generato da 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>

Si prega di provare a non usare le parole maiuscole nel caso in cui la normale convenzione sull'involucro possa esprimere ciò che si desidera dire.
shizhen,

0

Ci sono due opzioni per risolvere questo

Innanzitutto, modifica il file php.ini e inserisci il fuso orario predefinito

date.timezone = "America/New_York"

Una volta impostato il fuso orario in php.ini, riavviare il server

In secondo luogo, modificare il tempo di esecuzione assegnare il fuso orario in base alle proprie esigenze

date_default_timezone_set('America/New_York');

-1

Nella tua pagina di connessione inserisci un codice come questo in date_default_timezone_set("Africa/Johannesburg");base alla tua posizione corrente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.