"Date (): Es ist nicht sicher, sich auf die Zeitzoneneinstellungen des Systems zu verlassen ..."


359

Ich habe diesen Fehler erhalten, als ich angefordert habe, die PHP- Version von 5.2.17 auf PHP 5.3.21 auf dem Server zu aktualisieren .

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

Antworten:


556

Sie müssen wahrscheinlich die Zeitzone in eine Konfigurationszeile in Ihrer php.iniDatei einfügen. Sie sollten einen Block wie diesen in Ihrer php.ini-Datei haben:

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

Wenn nicht, fügen Sie es hinzu (ersetzen Sie die Zeitzone durch Ihre). Stellen Sie nach der Konfiguration sicher, dass Sie httpd ( service httpd restart) neu starten .

Hier ist die Liste der unterstützten Zeitzonen .


12
Um klar zu sein, stellen Sie nach dieser Änderung sicher, dass sudo service apache2 restart
Ryan

2
Dies löste es für mich, als andere Lösungen es nicht taten. Ich habe diesen Fehler nur erhalten, wenn ich Datumsfunktionen auf derselben Seite wie die Integration mit Amazon SES verwendet habe. Vielleicht hilft das jemand anderem.
master_gracey

9
Wenn Sie PHP CLI (php -r oder php -a) in Ihrem Client-Terminal verwenden, müssen Sie die CLI-Datei php.ini bearbeiten, nicht apache2. IhreC CLI php.ini-Datei finden Sie normalerweise unter /etc/php5/cli/php.ini
justinpage

2
Wie beim ersten Kommentar zu Apache müssen Sie auch IIS neu starten, damit dies unter Windows / IIS wirksam wird.
Jross

2
Das löst mein Problem! Nur eine Information für Nicht-Experten wie mich, um die php.inivon Apache verwendeten zu finden , führen Sie einfach den folgenden Befehl aus php -i | grep php.ini.
Joël Salamin

198

Wenn Sie Ihre php.ini-Konfiguration nicht ändern können, können Sie auch das folgende Snippet am Anfang Ihres Codes verwenden:

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

Die Liste der Zeitzonen finden Sie unter http://www.php.net/manual/en/timezones.php .


7
Aus irgendeinem Grund hat das Setzen von date.timezone = America / New_York in meiner php.ini und das Neustarten von Apache diese Fehlermeldung beim Ausführen eines Skripts mit swiftmailer nicht gestoppt. Am Ende musste ich auch date_default_timezone_set ('America / New_York') hinzufügen. oben im Skript wie vorgeschlagen. Vielen Dank!
Kyle

Ich habe deine Lösung ausprobiert. Jetzt ist der Fehler 500 interner Serverfehler. Ich benutze Apache 2.x und Codeigniter.
Hafiz Shehbaz Ali

@ ShehbazAli Du musst etwas falsch gemacht haben. In welchem ​​Ihrer Skripte haben Sie das Snippet hinzugefügt?
Babatunde Adeyemi

Der gleiche Code arbeitet an der Produktion. Es liegt kein Fehler vor. Ich habe Apache, PHP und MySQL manuell unter Windows 10 installiert. PHP, MySQL und Apache funktionieren. Aber dieses Projekt gibt Fehler.
Hafiz Shehbaz Ali

72

Fügen Sie Folgendes in Ihre index.phpDatei ein. Ich bin zum ersten Mal darauf gestoßen, als ich meine Bewerbung von meiner verschoben habe XAMPP- Server auf Apache 2.2 und PHP 5.4 ...

Ich würde Ihnen raten, dies in Ihrer index.phpDatei anstelle der php.iniDatei zu tun .

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

3
Hervorragende Lösung für den Fall, dass Sie nicht unbedingt über vollständigen Systemzugriff verfügen. Vermutlich ist dies eine Lösung für Personen mit eingeschränktem Zugriff oder wenn Sie eine robustere Lösung benötigen. Kombinieren Sie diese mit der Bearbeitung der php.ini, wenn Sie können
aqm

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

anstatt

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

hat für mich gearbeitet (zeigt das aktuelle Jahr und nicht mehr die Fehlermeldung). (Danke an Chris oben)


15

Wenn dies nicht Ihre Optionen sind

  • Ändern php.ini .
  • date_default_timezoneAnruf hinzufügen .

Anstelle von dateIhnen könnte verwendengmdate .

Ich habe verwendet, gmdate( "Y" )als ich ein Jahr für ein Copyright-Snipplet brauchte.


14

Wenn Sie CodeIgniter verwenden und php.ini nicht ändern können, habe ich am Anfang von index.php Folgendes hinzugefügt:

date_default_timezone_set('GMT');

Es funktioniert für mich, danke Jose für Ihre Hilfe. Mit freundlichen Grüßen, Sarim Ghani i-splendid.com
Sarim Shekhani

Dies funktioniert auf nativem php php.net/manual/en/function.date-default-timezone-set.php . TY, du hast mich auf den richtigen Weg gebracht. In Bezug auf die Zeitzonenliste für die Funktion hier php.net/manual/en/timezones.php
Louis Loudog Trottier


11

@ Justin zeigte mir die richtige Richtung, aber sein Code funktionierte nicht für mich. Dies tat:

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

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

Diese Lösung ist nicht nur für diejenigen geeignet, die keinen vollständigen Systemzugriff haben. Es ist für jedes Skript erforderlich, wenn Sie es anderen Personen als Ihnen zur Verfügung stellen. Sie wissen nie, auf welchem ​​Server das Skript ausgeführt wird, wenn Sie es an eine andere Person verteilen.


5

Dieses Problem nervt mich seit einiger Zeit, da ich versuche, ein "createbucket.php" -Skript in den Composer einzufügen, und mir wird immer wieder gesagt, dass meine Zeitzone falsch ist.

Am Ende war das einzige, was das Problem behoben hat, Folgendes: $ sudo nano /etc/php.ini

Suche nach Zeitzone

[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

Stellen Sie sicher, dass Sie die entfernen ;

Dann endlich

$ sudo service httpd restart

Und du kannst loslegen :)


5

Ich musste es in doppelte Anführungszeichen setzen.

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

Immer noch kein Workie (unter Mac OSX), also bin ich schließlich zusammengebrochen und habe hinzugefügt/etc/php.ini: date.timezone = America/Los_Angeles
MarkHu

3

Sie können die Zeitzone in Ihrer .htaccessDatei festlegen

php_value date.timezone UTC

Dies sollte funktionieren, wenn php.ini die Warnung trotz Einstellung immer noch zurückgibt (php 5.4. *). Hat für mich gearbeitet.
Christian Bonato

2

Zusätzlich zum Festlegen von date.timezone =, wie in mehreren Antworten erwähnt, wurde in der Datei php.ini ein Fehler gefunden, der verhinderte, dass die Datei date.timezone aufgerufen wurde. Ich fand es so, dass ich PHP über die Kommandozeile in einem Terminal ausführte. Dies führte dazu, dass in Zeile 114 ein Fehler gemeldet wurde. In meinem Fall hatte ich eine Einstellung zum Anzeigen von Fehlern mit '|' auskommentiert. zwischen 2 Werten. Es hat ihm nicht gefallen. Ich habe einen der Werte und den | entfernt und danach war alles gut


1

Eine einfache Methode für zwei Zeitzonen.

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

Eine schnelle Lösung, während Sie die Inkompatibilitäten beheben, besteht darin, die Fehlerberichterstattung in Ihrer index.phpDatei zu deaktivieren :

Fügen Sie die folgende Zeile in Ihre index.php unten eindefine( ‘_JEXEC’, 1 );

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

0

Ich hoste meinen EC2- und S3-Bucket in der Region us-west-2 (Oregon). Als ich anrief, $s3client->listBuckets()um vorhandene Buckets in meinem PHP aufzulisten, bekam ich eine Ausnahme - "Uncaught exception 'Exception' with message 'DateTime::__construct(): It is not safe to rely on the system's timezone settings...". ich habe unten Änderungen vorgenommen, damit es funktioniert. Das Teilen dieser Details für den Fall, dass jemand mit einem ähnlichen Problem konfrontiert ist und eine der oben genannten Antworten nicht geholfen hat.

  1. Basierend auf der Dokumentation @ AWS Configuring Network Time Protocol (NTP) habe ich durch Ausführen bestätigt, dass der Status des ntpd-Dienstes in Ordnung istntpstat Befehls . Wenn Sie eine Fehlermeldung erhalten, können Sie über diesen Link feststellen, was falsch läuft.
  2. Geöffnete Datei /etc/php.ini (einige haben sie möglicherweise in einem anderen Pfad, basierend auf der installierten PHP-Version) und festgestellt, dass sie date.timezonenicht auf einen Wert festgelegt wurde und auch standardmäßig kommentiert wurde. Ich habe den Kommentar durch Entfernen von ';' vor dieser Zeile und setzen Sie ihren Wert auf "UTC"und speichern Sie die Datei.
  3. Neustart von http- und ntp-Dämonen mit sudo service httpd restartund sudo service ntpd restart-Befehlen.

Danach kann ich Eimer ausnahmslos erfolgreich auflisten. Hoffe das hilft.


0

Wenn Sie Plesk verwenden, versuchen Sie es zuerst. Öffnen Sie PHP-Einstellungen. Ändern Sie unten auf der Seite date.timezone von DEFAULT in UTC.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein


0

Ich hatte diesen Fehler beim Ausführen von php-fpm in einem Chroot-Gefängnis. Ich habe versucht, etc / php.ini und / usr / share / zoneinfo im chroot-Verzeichnis zu erstellen, aber es hat einfach nicht funktioniert. Ich habe sogar versucht, die PHP-Fpm-Dämonen zu durchsuchen, um zu sehen, welche Datei ihnen fehlte - nichts sprang heraus.

Falls Google Sie hierher bringt, weil Sie diesen Fehler erhalten, wenn Sie php-fpm verwenden, das für chroot konfiguriert ist, können Sie ihn wahrscheinlich beheben, indem Sie diese Zeile /etc/php-fpm.d/www.confim Abschnitt ENV hinzufügen :

env[TZ] = America/New_York

Normalerweise ist ein Neustart von php-fpm erforderlich, damit er wirksam wird. Hoffe das hilft jemandem da draußen.


0

In meinem speziellen Fall habe ich PHP für die Verwendung von PHP-FPM (FastCGI Process Manager) konfiguriert. Bei der Ausführung phpinfo()über die CLI wurde die korrekte Zeitzone angezeigt, die ich in der php.ini festgelegt hatte. Sie war jedoch im Browser immer noch falsch und führte dazu, dass mein Code fehlschlug. Ich musste einfach den php-fpmDienst auf dem Server neu starten .

service rh-php56-php-fpm restart

Möglicherweise müssen Sie den httpdDienst auch neu starten , wenn Sie den bearbeitet habenphp.ini

service httpd restart

0

Diese Antwort von CtrlX ist die richtige Antwort, funktioniert jedoch möglicherweise nicht vollständig. Ich habe diese Zeile zu meiner php.ini- Datei hinzugefügt :

date.timezone = "America/Los_Angeles"

Der PHP-Fehler wurde jedoch nicht für alle meine Dateien entfernt, da sich einige meiner PHP-Skripte in Unterordnern befinden. Also musste ich die .htaccess- Datei bearbeiten , um php.ini für die rekursive Verwendung (in Unterordnern) einzurichten:

suphp_configpath /home/account_name/public_html

Dabei ist account_name Ihr cpanel-Kontoname und public_html der Ordner, in dem sich Ihre php.ini-Datei befindet.


0

Für Docker-Benutzer: Erstellen Sie eine lokale timezone.ini-Datei in Ihrem Projekt, richten Sie die Konfiguration in docker-compose.yml ein.

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

timezone.ini

    date.timezone=Australia/Sydney

0

Wenn Sie keinen Zugriff auf die Datei haben php.ini, erstellen oder bearbeiten Sie eine .htaccessDatei im Stammverzeichnis Ihrer Domain oder Ihres Sub und fügen Sie diese hinzu (generiert von 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>

Bitte versuchen Sie, keine Großbuchstaben zu verwenden, falls die normale Gehäusekonvention das ausdrücken kann, was Sie sagen möchten.
Shizhen

0

Es gibt zwei Möglichkeiten, um dies zu beheben

Wechseln Sie zunächst in die Datei php.ini und geben Sie die Standardzeitzone ein

date.timezone = "America/New_York"

Nachdem Sie die Zeitzone in der php.ini festgelegt haben, starten Sie den Server neu

Zweitens: Ändern Sie die Laufzeitzuweisungszeitzone entsprechend Ihren Anforderungen

date_default_timezone_set('America/New_York');

-1

Geben Sie auf Ihrer Verbindungsseite einen Code wie diesen ein, date_default_timezone_set("Africa/Johannesburg");der auf Ihrem aktuellen Standort basiert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.