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.


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

}

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.


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

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


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


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.


-1

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

public function init()
{
    date_default_timezone_set('Asia/Tehran');
    parent::init();
}

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