サーバー構築

php.ini のタイムゾーン設定を忘れるな!

php.ini のタイムゾーン設定を忘れるな!
タームゾーン(date.timezone)

セットアップ後に、php.ini のデフォルトタイムゾーン設定をすっかり忘れて、下記のようなエラーが永遠と記録されていたので、対応の仕方も含めて記録として残しておきます。

PHP 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 ‘Asia/Tokyo’ for ‘JST/9.0/no DST’ instead

こんなエラーが出たら、タイムゾーンの設定を!

タームゾーンの設定(date.timezone)

php.ini の ;date.timezone がコメントアウトされているので、date.timezone = Asia/Tokyo のように設定するだけです。php.iniは、複数存在している場合があるので、locate php.ini などで検索して、すべてにタイムゾーンを設定してください。

例えば、、
/etc/php5/cli/php.ini
/etc/php5/fpm/php.ini
/etc/php5/apache2/php.ini
/etc/php.ini

下記は既に修正済みです。

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

PHPのコマンドライン(cli)用 php.ini も忘れずにタイムゾーンの設定をしてください。Cronとかで使うかもしれません。# php -i | grep php.ini でパスが分ります。

php.ini を修正できない環境の場合は、date_default_timezone_set('Asia/Tokyo'); とスクリプト内に指定するのもあり。詳しくは、PHPマニュアルをどうぞ。

自動でタイムゾーンを設定してくれると助かるんですけどね・・・。

2026年11月時点の補足

記事の警告は PHP 5 系のものです。PHP 7.0 以降は、date.timezone が未設定でも警告は出ず、黙って UTC(協定世界時)が使われます。警告が出ない分、時刻が9時間ずれていることに気づきにくくなっています。PHP 8.5 で、php.ini を読み込まずに試した結果です。

$ php -n -r 'echo date("Y-m-d H:i T"), PHP_EOL, date_default_timezone_get(), PHP_EOL;'
2026-11-04 18:56 UTC
UTC
$ php -n -d date.timezone=Asia/Tokyo -r 'echo date("Y-m-d H:i T"), PHP_EOL;'
2026-11-05 03:56 JST

Debian 13 の php.ini の場所は /etc/php/8.4/cli/php.ini・/etc/php/8.4/fpm/php.ini です(記事の /etc/php5/ は当時の場所)。php.ini 本体を書き換えるより、設定を1つだけ書いたファイルを置くほうが、PHP の更新で消えません。

# echo 'date.timezone = Asia/Tokyo' > /etc/php/8.4/mods-available/timezone.ini
# phpenmod timezone
# systemctl restart php8.4-fpm
$ php -r 'echo date_default_timezone_get(), PHP_EOL;'
Asia/Tokyo
2026年11月時点の補足:OS が JST でも PHP は UTC のことがある

このサイトを置いている Debian 13.7 の VPSは OS の時刻帯が Asia/Tokyo(日本時間)ですが、PHP の date.timezone は UTC になっていて、同じ時刻が 9時間ずれて表示されました(2026年11月5日)。PHP は OS の設定ではなく、php.ini の date.timezone を見ます。

$ timedatectl | grep "Time zone"
                Time zone: Asia/Tokyo (JST, +0900)
$ php -r 'echo date("Y-m-d H:i T"), PHP_EOL;'
2026-11-05 02:41 UTC
$ php -d date.timezone=Asia/Tokyo -r 'echo date("Y-m-d H:i T"), PHP_EOL;'
2026-11-05 11:41 JST
どこの設定確かめ方このサーバー
OStimedatectlAsia/Tokyo(+0900)
PHPphp -r 'echo date_default_timezone_get();'UTC
困りごと原因
記事の投稿時刻が 9時間ずれるPHP が UTC
ログの時刻とアプリの時刻が合わないOS(JST)と PHP(UTC)が違う
日付が変わる時刻が朝の 9時になるUTC の 0時 = 日本の 9時

⚠ Laravel などのフレームワークは、php.ini ではなくアプリの設定(APP_TIMEZONE など)で時刻帯を決めます。php.ini と両方を確かめてください。