web-dev-qa-db-ja.com

Symfony2およびdate_default_timezone_get()-システムのタイムゾーン設定に依存することは安全ではありません

Symfony2プロジェクトがあります。今日、phpを5.5.7に更新し、それ以来、

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

Php.iniでデフォルトのタイムゾーンを設定します

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

これが良いphp.iniであることを確認するために、

phpinfo();

そして、私がそこに着く道は私が修正しているものです:

 /usr/local/php5.5.7/lib 

しかし、そこには、

Default timezone    UTC 

それは奇妙です。

何か案が?ありがとうございました。

77
Miloš

Apacheのphp.iniで設定しようとしているのかもしれませんが、CLI(コマンドラインインターフェイス)php.iniが適切ではありません。

次のコマンドでphp.iniファイルを見つけます。

php -i | grep php.ini

次に、date.timezoneを検索し、"Europe/Amsterdam"に設定します。すべての有効なタイムゾーンはここにあります http://php.net/manual/en/timezones.php

別の方法(もう一方が機能しない場合)、AppKernel.phpファイルを検索します。このファイルは、Symfonyプロジェクトディレクトリのappフォルダーの下にある必要があります。クラスAppKernelで以下の__construct関数を上書きします。

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

}
148
sas

この問題を修正する同様の方法を見つけました(少なくとも私にとってはそうでした)。

  1. 最初にCLI php.iniの場所を確認します。

    php -i | grep "php.ini"

  2. 私の場合、設定ファイル(php.ini)パス=>/etc

  3. その後、cd ..を最後まで戻し、cd/etcに入れます。私の場合、lsを実行します。php.iniが表示されず、php.ini.defaultのみが表示されます。

  4. 次に、php.iniという名前のphp.ini.defaultファイルをコピーします。

    Sudo cp php.ini.default php.ini

  5. 編集するには、ファイルの権限を変更します。

    Sudo chmod ug+w php.ini

    Sudo chgrp staff php.ini

  6. ディレクトリを開き、php.iniファイルを編集します。

    open .

    ヒント:パーミッションの問題のためにphp.iniを編集できない場合は、「php.ini.default」をコピーしてデスクトップに貼り付け、名前を「php.ini」に変更してから開きます。手順7に従って編集します。次に、/ etcフォルダーに移動(コピー+貼り付け)します。問題は解決します。

  7. [日付]を検索し、次の行が正しい形式であることを確認します。

    date.timezone = "Europe/Amsterdam"

これがあなたのお役に立てば幸いです。

66
Pknife

Crackによって現在受け入れられている回答はSymfony 2.3で廃止され、3.0で削除されます。コンストラクターに移動する必要があります。

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

PHP 5.5以降、CLIインターフェース用の個別のphp.iniファイルがあります。コマンドラインからsymfonyコンソールを使用する場合、この特定のphp.iniが使用されます。

Ubuntu 13.10のチェックファイル:

/etc/php5/cli/php.ini

2
Valentas

sasの答え 、PHP 5.4、Symfony 2.8のフォローアップ

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

date_default_timezone_setの代わりに。また、チェックを成功させるために、カスタムini_setの先頭にweb/config.phpへの呼び出しを追加しました。

1
cxw

RedhatまたはCentosでPHP 5.1を使用している場合に問題が発生します

RHEL/CentOS上のPHP 5.1はタイムゾーン関数をサポートしていません

1
bilelovitch