「date():システムのタイムゾーン設定に依存するのは安全ではありません…」


359

サーバーでPHPのバージョンを5.2.17からPHP 5.3.21に更新するように要求したときに、このエラーが発生しました。

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

回答:


556

おそらく、php.iniファイルの構成行にタイムゾーンを入れる必要があります。php.iniファイルに次のようなブロックがあるはずです。

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

そうでない場合は、それを追加します(自分のタイムゾーンを置き換えます)。設定後、必ずhttpd(service httpd restart)を再起動してください。

サポートされているタイムゾーンリストは次のとおりです


12
明確にするために、この変更を行った後は必ずsudo service apache2 restart
Ryan

2
他の解決策が解決しなかったとき、これは私にとってそれを解決しました。このエラーは、Amazon SESとの統合と同じページで日付関数を使用した場合にのみ発生しました。多分それは誰かを助けるでしょう。
master_gracey 2013年

9
クライアント端末内でPHP CLI(php -rまたはphp -a)を使用している場合は、apache2ではなくCLI php.iniファイルを編集する必要があります。YourC CLI php.iniファイルは通常、/ etc / php5 / cli / php.iniにあります
justinpage

2
Apacheに関する最初のコメントと同様に、これをWindows / IISで有効にするにはIISを再起動する必要があります。
jross 2014

2
これは私の問題を解決します!私のような非専門家向けの情報php.iniだけです。Apacheで使用されているものを見つけるには、次のコマンドを実行しますphp -i | grep php.ini
ジョエルSalamin

198

php.ini設定を変更できない場合は、コードの先頭で次のスニペットを使用することもできます。

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

タイムゾーンのリストはhttp://www.php.net/manual/en/timezones.phpにあります


7
何らかの理由で、php.iniでdate.timezone = America / New_Yorkを設定し、Apacheを再起動しても、swiftmailerを使用してスクリプトを実行すると、このエラーメッセージは停止しませんでした。最終的に、date_default_timezone_set( 'America / New_York');も追加する必要がありました。推奨されるようにスクリプトの上部に。ありがとう!
kyle

私はあなたの解決策を試しました。現在、エラーは500内部サーバーエラーです。私はapache 2.xとcodeigniterを使用しています。
Hafiz Shehbaz Ali 2015

@ShehbazAliあなたは何か間違ったことをしたに違いありません。どのスクリプトにスニペットを追加しましたか?
Babatunde Adeyemi

同じコードがプロダクションで機能しています。エラーはありません。私はウィンドウ10に手動でApache、php、MySQLをインストールしました。PHP、MySQL、Apacheは動作します。しかし、このプロジェクトはエラーを出しています。
Hafiz Shehbaz Ali 2015

72

index.phpファイルに以下を追加します。XAMPPサーバーからApache 2.2およびPHP 5.4にアプリケーションを移動したときに、最初にこれに遭遇しました...

index.phpファイルではなくファイルで行うことをお勧めしphp.iniます。

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

3
完全なシステムアクセスが必ずしも必要でない場合に最適なソリューションです。これは、アクセスが制限されているか、より堅牢なソリューションが必要な人向けであり、php.iniの編集と組み合わせることができます
aqm

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

の代わりに

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

私のために働いた(今年を示し、それ以上エラーメッセージを示さない)。(上記のクリスに感謝)


15

これらが選択肢でない場合

  • 修正中php.ini
  • date_default_timezone通話を追加しています。

代わりにdateを使用できますgmdate

私はgmdate( "Y" )著作権スニペットの1年が必要なときに使用しました。


14

CodeIgniterを使用していて、php.iniを変更できない場合は、index.phpの先頭に次を追加しました。

date_default_timezone_set('GMT');

それは私のために機能します、あなたの助けにホセに感謝します。よろしく、サリムガーニi-splendid.com
サリムシェカーニ

これはネイティブのphp php.net/manual/en/function.date-default-timezone-set.phpで動作します。TY、あなたは私を正しい軌道に乗せました。php.net/manual/en/timezones.php
Louis Loudog Trottier '28


11

@Justisは私に正しい方向を示しましたが、彼のコードは私にとってはうまくいきませんでした。これはしました:

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

ドキュメント:http : //www.php.net/manual/en/function.date-default-timezone-get.php

このソリューションは、システムへの完全なアクセス権を持っていない人だけのものではありません。あなた以外の誰かに提供する場合は、スクリプトに必要です。スクリプトを他の誰かに配布するときに、スクリプトがどのサーバーで実行されるかはわかりません。


5

この問題は、 "createbucket.php"スクリプトをコンポーザーに挿入しようとしているため、しばらくの間私を悩ませてきました。タイムゾーンが間違っていると何度も言われます。

結局、問題を修正した唯一のものは、 $ sudo nano /etc/php.ini

タイムゾーンを検索

[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

必ず削除してください ;

そして最後に

$ sudo service httpd restart

そして、あなたは行くのが良いでしょう:)


5

二重引用符で囲む必要がありました。

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

(Mac OSXでは)まだ作業者はいないので、結局故障して追加しました/etc/php.ini: date.timezone = America/Los_Angeles
MarkHu


2

いくつかの回答で述べたように、date.timezone =を設定することに加えて、php.iniファイルで、date.timezoneに到達できないようにするエラーを見つけました。私が見つけた方法は、ターミナルのコマンドラインからphpを実行することでした。これにより、114行目でエラーが報告されました。私の場合、「|」のエラーを表示する設定のコメントを外しました 2つの値の間。気に入らなかった。値の1つと|を削除しました その後はすべて良かった


1

2つのタイムゾーンの簡単な方法。

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

非互換性を修正するための簡単な解決策は、index.phpファイルのエラー報告を無効にすることです。

あなたの中に以下の行を挿入しますindex.phpを以下define( ‘_JEXEC’, 1 );

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

0

EC2およびS3バケットをus-west-2(オレゴン)リージョンでホストしています。$s3client->listBuckets()私のphpで既存のバケットをリストするために呼び出すと、例外が発生しました-機能"Uncaught exception 'Exception' with message 'DateTime::__construct(): It is not safe to rely on the system's timezone settings...". させるために以下の変更を行いました。誰かが同様の問題に直面していて、上記の回答のいずれかが役に立たない場合に備えて、これらの詳細を共有します。

  1. ドキュメント@ AWS Configuring Network Time Protocol(NTP)に基づいて 、ntpstatコマンドを実行してntpdサービスのステータスが正常であることを確認しました。エラーが発生した場合、このリンクは何が悪いのかを知るのに役立ちます。
  2. /etc/php.iniファイルを開き(インストールされているphpのバージョンに基づいて異なるパスにある場合があります)、date.timezone値が設定されておらず、デフォルトでコメント化されていることがわかりました。「;」を削除してコメントを外しました この行の前に値を設定し"UTC"てファイルを保存します。
  3. sudo service httpd restartおよびsudo service ntpd restartコマンドを使用して、httpおよびntpデーモンを再起動しました。

この後、例外なくバケットを一覧表示できます。お役に立てれば。


0

Pleskを使用している場合は、まず、ページの下部にある[PHP設定を開く]で、date.timezoneをDEFAULTからUTCに変更してください。

ここに画像の説明を入力してください

ここに画像の説明を入力してください


0

chrootの刑務所でphp-fpmを実行すると、このエラーが発生しました。chrootディレクトリにetc / php.iniと/ usr / share / zoneinfoを作成してみましたが、うまくいきませんでした。私はphp-fpmデーモンをstraceしてみて、それらが欠落していたファイルを確認しました-何も飛び出しませんでした。

したがって、chroot用に構成されたphp-fpmを使用しているときにこのエラーが発生したためにGoogleがここにアクセスし/etc/php-fpm.d/www.confた場合、ENVセクションに次の行を追加することでおそらく修正できます。

env[TZ] = America/New_York

php-fpmの再起動は、通常、有効にするために必要です。これが誰かの役に立つことを願っています。


0

私の特定のケースでは、PHP-FPM(FastCGI Process Manager)を使用するようにPHPを構成しています。phpinfo()CLIから実行すると、php.iniで設定した正しいタイムゾーンが表示されましたが、それでもブラウザーでは正しくないため、コードが失敗しました。php-fpmサーバーでサービスを再起動する必要がありました。

service rh-php56-php-fpm restart

httpd編集した場合は、サービスを再起動する必要がある場合もありますphp.ini

service httpd restart

0

この回答から上記CtrlXは正解ですが、それは完全に動作しない場合があります。この行をphp.iniファイルに追加しました。

date.timezone = "America/Los_Angeles"

しかし、私のPHPスクリプトの一部がサブフォルダーにあるため、すべてのファイルのPHPエラーは削除されませんでした。したがって、.htaccessファイルを編集してphp.iniを再帰的に(サブフォルダーで)使用するように設定する必要がありました。

suphp_configpath /home/account_name/public_html

ここで、account_nameはcpanelアカウント名で、public_htmlはphp.iniファイルがあるフォルダーです。


0

dockerユーザーの場合:プロジェクトにローカルのtimezone.iniファイルを作成し、docker-compose.ymlに構成を設定します。

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

timezone.ini

    date.timezone=Australia/Sydney

0

ファイルphp.iniにアクセスできない場合.htaccessは、ドメインまたはサブのルートでファイルを作成または編集し、これを追加します(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>

通常の大文字と小文字の規則であなたの言いたいことが表現できる場合は、大文字を使わないようにしてください。
Shizhen

0

これを解決するための2つのオプションがあります

まず、php.iniファイルに変更し、デフォルトのタイムゾーンを設定します

date.timezone = "America/New_York"

php.iniでタイムゾーンを設定したら、サーバーを再起動します

次に、必要に応じてランタイムタイムゾーンの割り当てを変更します。

date_default_timezone_set('America/New_York');

-1

接続ページに、date_default_timezone_set("Africa/Johannesburg");現在の場所に基づいてこのようなコードを挿入します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.