2014-04-01 16 views
14

Sono un po 'infastidito dal mantenere il fuso orario di PHP aggiornato. Mi piace davvero che tutto il resto del mio sistema si fidi del fatto che sto mantenendo correttamente il fuso orario del sistema. Forse potrebbero esserci casi d'uso in cui potrebbe essere utile configurare PHP in modo diverso, ma perché PHP mi avvisa che fare affidamento sul mio fuso orario non è sicuro?Perché PHP pensa che sia una cattiva idea affidarsi al fuso orario del sistema?

Warning: date(): E 'non è sicuro di fare affidamento su fuso orario impostazioni del sistema. Sei richiesto per utilizzare l'impostazione date.timezone o la funzione date_default_timezone_set().

+0

@ NicolòMonili ancora credi nella magia? Pensavo che lo abbiano abolito ad un certo punto (o meglio dopo) nel Medioevo. La scienza è la magia * de jour *! –

+0

Questa domanda sembra essere off-topic perché può essere trovata con una semplice [ricerca] (https://www.google.com.sg/search?q=date.timezone+E_WARNING+--+Really+necessario) –

+0

StasM ha risposto molto bene qui: http://stackoverflow.com/a/11749041/1952201 – huwiler

risposta

8

Ecco cosa sviluppatori PHP dicono su di esso (nella related discussion):

No - si, come amministratore, sono tenuti a prendere una decisione informata sul ciò che si desidera che il fuso orario di essere. Ci sono stati troppi bug nella segnalazione in cui la gente non aveva idea, quindi ora lanciamo un avvertimento.

Derick Rethans è l'autore di this commit che ha trasformato date_warning da E_STRICT (in PHP 5.2-) per E_WARNING (PHP 5.3+).

La stessa discussione ha soluzione a questo bel suono (ma ovviamente scomodo), applicata da MediaWiki:

In realtà, il valore predefinito ragionevole è quello guess_timezone() fa già, ad eccezione senza le avvertenze. Puoi ottenere questo comportamento con ad es.

date_default_timezone_set(@date_default_timezone_get()); 

nella parte superiore del programma. Questo è ciò che MediaWiki fa (tranne con che modifica error_reporting invece di usare @). Abbiamo rubato l'idea a un'altra app web. È più comodo rispetto alla duplicazione della funzionalità di guess_timezone() nell'applicazione.

E 'prerogativa di Derick per infastidire tutti gli utenti a morte con avvertimenti, come il suo modo di indicare la sua avversione per lo stato del sistema operativo supporto per l'interrogazione del fuso orario del sistema. Questa è la ricompensa che gli diamo per aver scritto un sacco di codice data/ora.

La parte fondamentale di questa soluzione è date_default_timezone_get funzione, che, al fine, restituisce il fuso orario predefinito dalla ...

  • leggere il set fuso orario utilizzando la funzione date_default_timezone_set() (se presente)
  • lettura della variabile ambiente TZ (se non vuota) (Prima PHP 5.3.0)
  • lettura del valore dell'opzione ini date.timezone (se impostato)
  • interrogare il sistema operativo host (se supportato e consentito dal sistema operativo)
-2

PHP viene spesso utilizzato da persone che Non mantenere correttamente i loro sistemi, o girare su sistemi di altri popoli (hosting condiviso). Se stai mantenendo correttamente il tuo sistema, configurare semplicemente il fuso orario PHP predefinito è semplice.

+0

La tua frase "usata spesso da persone che non mantengono correttamente" si basa su cosa? Inoltre non vedo ancora perché valga la pena di avvertire che è ** non sicuro **. –

+1

Da milioni di server di hosting PHP, che servono decine di milioni di siti guidati da PHP rispetto al numero di aziende che possono permettersi di utilizzare risorse dedicate. –

+1

La mia affermazione si basa su oltre un decennio di esperienza come sviluppatore di software PHP professionale, lavorando sia in grandi organizzazioni (come faccio ora) sia come appaltatore indipendente (di proprietà della mia società di sviluppo software). Ho visto quasi tutti i tipi di persone che hanno bisogno di "programmatori PHP" o "sviluppo web". Un 80% dei siti Web PHP che ho visto non ha un vero e proprio amministratore del server. – dotancohen

8

Poiché Derick detto. Ecco perchè. Questo internals mailing list thread ti dirà tutto sulla "logica" dietro questa decisione. L'avviso date.timezone è una costante seccatura per chiunque usi PHP come linguaggio di programmazione e non come sostituto per sapere come scrivere codice.

In particolare, questo comportamento guida i dadi me. Normalmente non abuserei del SO Q & Un sistema per sfogare ma questo avvertimento mi spinge le banane. Inoltre, è il 1 aprile quindi perché no?

+0

È davvero difficile impostare 'date.timezone' nel file' php.ini'? [Apparently ...] (http://stackoverflow.com/questions/22760173/setting-timezone-non -applying) –

+0

@NiettheDarkAbsol Sì, lo è!Sebbene il mantenimento del fuso orario del sistema sia un gioco da ragazzi semplicemente osservando l'orologio di un sistema, un fuso orario PHP configurato in precedenza agevolerà facilmente il cambio del fuso orario. OK, è un caso raro, ma mi muoverò presto il mio laptop al 4 ° fuso orario. –

+0

@NiettheDarkAbsol Non è una questione di difficoltà. Si tratta di forzare un anti-pattern noto (ad esempio anti-pattern di registro tramite file .ini) sugli utenti. Ho esattamente * zero * usato per un file php.ini quando sto programmando perché è un input globale non necessario per i miei programmi. Non dovrei essere costretto a usare un php.ini per funzionare senza messaggi 'E_WARNING' non necessari. – rdlowrey

0

1) utilizzando il sistema Fuso orario è un major performance overhead.

2) implementazioni di database TZ da diversi fornitori hanno historicaly avuto un sacco di problemi funzionali

3) ci sono problematiche legate alla intellectual property dei dati. È la minaccia delle rivendicazioni e la spesa per difenderli che mina tali progetti - non la validità della richiesta. Il caso del 2011 è stato risolto in via stragiudiziale, il che significa che la questione è stata risolta solo nel caso del ricorrente, non per eventuali sfide future.

4) Una conseguenza di (3) è che anche se un amministratore di sistema è diligente con gli aggiornamenti ci possono essere problemi a monte che impediscono la diffusione dei dati rivisti

+0

1) si riferisce ad un PHP Ubuntu rattoppato. Non mostra in generale perché usare il sistema TZ dovrebbe essere un problema di prestazioni. –

Problemi correlati