Symfony2 und date_default_timezone_get () - Es ist nicht sicher, sich auf die Zeitzoneneinstellungen des Systems zu verlassen

77

Ich habe ein Symfony2-Projekt. Ich habe mein PHP heute auf 5.5.7 aktualisiert und seitdem bekomme ich das

Warning: date_default_timezone_get(): 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 the timezone 'UTC' for now, but please set date.timezone to select your timezone. in...

Ich habe die Standardzeitzone in meiner php.ini eingerichtet

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = "Europe/Paris";

Um sicherzugehen, dass dies die gute php.ini ist, habe ich nachgefragt

phpinfo();

Und der Weg, den ich dorthin gehe, ist der, den ich ändere:

 /usr/local/php5.5.7/lib 

Aber da drin sehe ich das

Default timezone    UTC 

Welches ist seltsam.

irgendeine Idee? Vielen Dank.

Miloš
quelle
2
können Sie mir den vollständigen Pfad der php.ini bestätigen , dass Sie geändert haben
sas
2
Wenn Sie diese Warnung in symfony - Konsole erhalten dann auch Sie ändern müssen bei cli / php.ini
sas

Antworten:

148

Vielleicht versuchen Sie es in Apache einzustellen php.ini, aber Ihre CLI (Command Line Interface) php.iniist nicht gut.

Suchen Sie Ihre php.iniDatei mit dem folgenden Befehl:

php -i | grep php.ini

Und dann suchen date.timezoneund einstellen auf "Europe/Amsterdam". Alle gültigen Zeitzonen finden Sie hier http://php.net/manual/en/timezones.php

Auf andere Weise (falls die andere nicht funktioniert) suchen Sie nach der Datei AppKernel.php, die sich im Ordner appIhres Symfony- Projektverzeichnisses befinden sollte. Überschreiben Sie die folgende __constructFunktion in der Klasse AppKernel:

<?php     

class AppKernel extends Kernel
{
    // Other methods and variables


    // Append this init function below

    public function __construct($environment, $debug)
    {
        date_default_timezone_set( 'Europe/Paris' );
        parent::__construct($environment, $debug);
    }

}
sas
quelle
Vielen Dank, aber bereits überprüft: Geladene Konfigurationsdatei => /usr/local/php5.5.7/lib/php.ini
Miloš
es sollte eine andere konfiguration für cli geben, hast du das auch überprüft?
Sas
Hm, und wie findet man diesen zweiten?
Miloš
1
Ihre apache2 Neustart wird annehmen , php und neu zu starten
sas
1
Ich hatte das gleiche Problem und Ihre andere Lösung funktioniert mit mir
Ahmed Hamdy
66

Es wurde ein ähnlicher Weg gefunden, um dieses Problem zu beheben (zumindest für mich).

  1. Überprüfen Sie zuerst, wo sich das CLI php.inibefindet:

    php -i | grep "php.ini"

  2. In meinem Fall endete ich mit: Konfigurationsdatei (php.ini) Pfad => / etc.

  3. Dann den cd ..ganzen Weg zurück und cdhinein /etc, mach lsin meinem Fall, dass php.ini nicht angezeigt wurde, nur eine php.ini.default

  4. Kopieren Sie nun die Datei php.ini.default mit dem Namen php.ini:

    sudo cp php.ini.default php.ini

  5. Ändern Sie zum Bearbeiten die Berechtigungen der Datei:

    sudo chmod ug+w php.ini

    sudo chgrp staff php.ini

  6. Öffnen Sie das Verzeichnis und bearbeiten Sie die Datei php.ini:

    open .

    Tipp: Wenn Sie die php.ini aufgrund eines Berechtigungsproblems nicht bearbeiten können, kopieren Sie 'php.ini.default', fügen Sie sie in Ihren Desktop ein und benennen Sie sie in 'php.ini' um. Öffnen Sie sie dann und bearbeiten Sie sie im folgenden Schritt 7. Verschieben Sie es dann (kopieren + einfügen) in den Ordner / etc. Problem wird behoben.

  7. Suchen Sie nach [Datum] und stellen Sie sicher, dass die folgende Zeile das richtige Format hat:

    date.timezone = "Europe/Amsterdam"

Ich hoffe das könnte dir helfen.

Peter
quelle
1
Du hast mir gerade ernsthafte Kopfschmerzen erspart. Danke Freund!
Stephen Tetreault
Technisch sollte dies die richtige Antwort sein, da es das Problem tatsächlich langfristig löst.
Jan
25

Die aktuell akzeptierte Antwort von crack ist in Symfony 2.3 veraltet und wird um 3.0 entfernt. Es sollte in den Konstruktor verschoben werden:

public function __construct($environment, $debug) {
    date_default_timezone_set('Europe/Warsaw');
    parent::__construct($environment, $debug);
}
Krzysztof Bociurko
quelle
Vielen Dank für diese Antwort. Es löste mein Problem in Version 3
Dericcain
2

Seit PHP 5.5 gibt es eine separate php.ini-Datei für die CLI-Schnittstelle. Wenn Sie die Symfony-Konsole über die Befehlszeile verwenden, wird diese spezielle php.ini verwendet.

In Ubuntu 13.10 Datei überprüfen:

/etc/php5/cli/php.ini

Valentas
quelle
1

Das Problem tritt auf, wenn wir PHP 5.1 unter Redhat oder Cent OS verwenden

PHP 5.1 unter RHEL / CentOS unterstützt die Zeitzonenfunktionen nicht

bilelovitch
quelle
1

Nach der Antwort von sas , PHP 5.4, Symfony 2.8, musste ich verwenden

ini_set('date.timezone','<whatever timezone string>');

statt date_default_timezone_set. Ich habe auch einen Aufruf an ini_setdie Spitze eines Brauchs hinzugefügt web/config.php, damit diese Prüfung erfolgreich ist.

cxw
quelle
-1

Fügen Sie diesen Code Ihrer AppKernel-Klasse hinzu:

public function init()
{
    date_default_timezone_set('Asia/Tehran');
    parent::init();
}
Sifb71
quelle
initist seit Version 2.3 veraltet und wird in 3.0 entfernt. Verschieben Sie Ihre Logik stattdessen im Konstruktor wie @Krzysztof Bociurko oder die aktualisierte akzeptierte Antwort.
user276648