MAMP環境でPHPのタイムゾーン設定の確認と変更。
MAMPの新規インストールやPHPのバージョンアップをしたとき、タイムゾーンの設定値が「no value」(未設定)の状態で、デフォルトタイムゾーンとして「UTC」(協定世界時)の時刻が適用されるので、MAMP環境のPHPのデフォルトタイムゾーンの設定値を「Asia/Tokyo」に変更する方法。忘れるのでメモ。
「UTC」(協定世界時)は、世界の標準時刻の基準として策定されたもので、世界中の数百台のセシウム原子時計(セシウム原子の振動を利用した時計)の測定結果の平均によって定められ、緯度0度のグリニッジ子午線上の時刻を表す。(UTC + 9時間が日本の時刻。)
「GMT」(グリニッジ標準時)は、英国のグリニッジ天文台での天文観測による時刻。
一定ではない地球の自転で生じる「GMT」と「UTC」のズレが±0.9秒以内となるように閏秒で調整される。基本的に「UTC」=「GMT」として扱われる。コンピューター関係では「UTC」の使用が推奨されている(?)。(使用情勢の詳細は不明。)
[ PHPのタイムゾーンの変更方法 ]
- phpファイルのスクリプト内で臨時対応するだけなら、「date_default_timezone_set()関数」を使う。
- PHP自体のデフォルトタイムゾーンの設定を変更する場合は、使用しているPHPのバージョンの「php.ini」ファイルを修正する。
※ 「php.ini」は、PHPプログラムの全体的な動作や環境を設定するファイル。
macOS High Sierra バージョン 10.13.6
MAMP Version 6.6
PHP 7.4.21 で確認。
タイムゾーンの現在の設定を確認する方法
現在時刻が正しくない原因がタイムゾーンの設定かどうかを念のために確認。
(PHPの設定情報などを出力する「phpinfo()関数」で現在の設定を確認する。)
1. ブラウザにphpinfoを出力して確認する方法
- 任意のphpファイルを作成して、下記を記述して保存。
- ブラウザからアクセス。
- 表示されるタイムゾーンと現在時刻を確認。
- 表示されているphpinfoの情報から「date.timezone」の項目欄を検索して設定値を確認。(初期値では「no value」。)
※ 「Default timezone」の項目欄がデフォルト設定として適用されているタイムゾーン。(初期値では「UTC」。)
//現在設定されているデフォルトタイムゾーンを出力
echo 'タイムゾーン : '.date_default_timezone_get().'<br>';
//現在時刻を出力
echo '現在時刻 : '.date('Y年m月d日 H時i分s秒').'<br>';
//phpinfoを出力
phpinfo();
date_default_timezone_get() : 「date_default_timezone_set()関数」での設定、「date.timezoneのiniオプション」での設定、無ければ「UTC」の優先順位でデフォルトのタイムゾーンを取得して返す。
date(‘フォーマット’, ‘Unixタイムスタンプ’) : 指定したタイムスタンプを指定したフォーマットの文字列で返す。タイムスタンプの指定が無い場合、デフォルトタイムゾーンでの現在時刻(「time()」の値と同じ)が使用される。
phpinfo() : 現在のPHPのバージョンやモジュールなどの設定内容を出力する。「INFO_GENERAL」など引数を指定して出力する情報を絞ることもできる。
2. ターミナルからコマンドでphpinfoを確認する方法
phpファイルを作成して確認するのが面倒な場合は、ターミナルから「php」コマンドで確認する。
- MAMPで使用しているPHPの実行ファイルのエイリアスを作成。(エイリアスはターミナルを終了すると削除される。)
- 作成したエイリアス(ここでは「ag2php」)で「php」コマンドを実行。
- PHPでタイムゾーンの設定と現在時刻を出力して確認。
- phpinfoの「timezone」の文字列が含まれる行を検索、出力して確認。
※ MAMPのPHPの実行ファイルは、「/Applications/MAMP/bin/php」ディレクトリに「phpバージョンの番号/bin/php」でバージョンごとのフォルダに分けて配置されている。(ここではバージョン「7.4.21」を使用。)
※ FinderでPHPの実行ファイルを選択、右クリックメニューを表示し、「option」キーを押して「”php”のパス名のコピー」を選択すると該当ファイルのパスがコピーできる。
※ PHPをコマンドラインで実行する場合、出力の改行には改行コードが必要。(ここでは、自動的にOSを判別して改行コードを設定するPHPの定義済みの定数「PHP_EOL」を使用。)
alias ag2php="/Applications/MAMP/bin/php/php7.4.21/bin/php"
ag2php -r "echo 'タイムゾーン : '.date_default_timezone_get().PHP_EOL;"
タイムゾーン : UTC #実行結果
ag2php -r "echo '現在時刻 : '.date('Y年m月d日 H時i分s秒').PHP_EOL;"
現在時刻 : 2021年10月22日 01時01分01秒 #実行結果
ag2php -i | grep timezone
Default timezone => UTC #実行結果
date.timezone => no value => no value #実行結果
alias : コマンドの別名(エイリアス)を登録したり、表示したりするコマンド。「alias 任意の名前=”任意のコマンドの実行ファイル”」でエイリアスの登録。「alias 任意の名前」で、指定した名前にエイリアスが登録されているかの確認。引数に何も指定しない場合は現在登録されているエイリアスをすべて表示。(登録したエイリアスの削除は「unalias」コマンド。)
php : PHPのCLI(Command Line Interface)。オプション「-r」で「'<? ?>’」タグを使わずにPHPのコードを実行、オプション「-i」でphpinfoを出力。
| : パイプ。コマンドの標準出力を別のコマンドの標準入力として繋げる。
grep : ファイル内で指定した文字列や検索パターンが含まれる行を表示するコマンド。指定した文字列を含む行をファイルから検索して、一致した文字列を含んでいる行をすべて表示する。検索パターンには正規表現も使える。
タイムゾーンの設定を変更する方法
PHPでタイムゾーンを「Asia/Tokyo」に変更する方法。
1. 任意のphpスクリプト内で一時的に変更する場合
「date_default_timezone_set()関数」を使う。
引数に使用したいタイムゾーンのIDを指定すると、記述した箇所以降のタイムゾーンの設定が変更される。
※ 有効なタイムゾーンIDの一覧(PHP公式マニュアル)。
※ WordPressのテンプレートで「date_default_timezone_set()関数」を使用すると予約投稿の時刻表示が正しく動作しなくなるなど不具合が出たので注意。
echo 'タイムゾーン : '.date_default_timezone_get().'<br>';
echo '現在時刻 デフォルト : '.date('Y年m月d日 H時i分s秒').'<br>';
date_default_timezone_set('Asia/Tokyo');
echo 'タイムゾーン : '.date_default_timezone_get().'<br>';
echo '現在時刻 Asia/Tokyo : '.date('Y年m月d日 H時i分s秒');
date_default_timezone_set(‘タイムゾーンID’) : 日付/時刻関数で使用されるデフォルトタイムゾーンを、指定したタイムゾーンに設定する。
2. 「php.ini」のデフォルトタイムゾーンの設定値を変更する場合
エディターで「php.ini」ファイルを開いて、「date.timezone」の行を修正して上書き保存する。
- 「/Applications/MAMP/bin/php/phpバージョンの番号/conf」ディレクトリにある「php.ini」ファイルをエディターで開く。(ここではバージョン「7.4.21」を使用。)
- 「[Date]」の項目にある「;date.timezone = “Europe/Berlin”」(今回の環境では910行目)を「date.timezone = “Asia/Tokyo”」に変更して保存。(行頭の「;」でコメントアウトされているので「;」は削除する。)
- MAMPを再起動して変更を反映させる。
- 先述の、タイムゾーンの現在の設定の確認方法で「Asia/Tokyo」になっているかを確認。
[ ターミナルで「php.ini」ファイルを編集する場合 ]
ターミナル上でファイル編集する場合は、下記の処理をするコマンドを順番に実行する。
- MAMPを終了。(起動していた場合。)
- 「php.ini」ファイルがあるディレクトリに移動。(ここではバージョン「7.4.21」の「conf」フォルダ。)
- 「php.ini」ファイルのバックアップを作成。(ここでは「php_backup.ini」として同じディレクトリに複製。)
- ターミナル上でCUIエディターのVimを起動して「php.ini」ファイルを開く。
- Vim起動時は「ノーマルモード」(カーソル移動などをするモード)で立ち上がるので、「910G」と入力して該当の行(今回の環境では910行目)に移動。
- 「i」キーで「インサートモード」(テキスト入力ができるモード)にして、「;date.timezone = “Europe/Berlin”」を「date.timezone = “Asia/Tokyo”」に書き換える。
- 記述変更が完了したら「esc」キーを押して「インサートモード」から「ノーマルモード」に戻り、「:wq」(「編集を保存して終了」のVimの終了コマンド)を入力して「enter」キーで実行してVimを終了。
- MAMPを起動。
- 設定変更の動作確認後、不要ならバックアップとして作成した「php_backup.ini」ファイルは削除。
killall MAMP #MAMPを終了
cd /Applications/MAMP/bin/php/php7.4.21/conf #ディレクトリを移動
cp -i php.ini php_backup.ini #「php.ini」を「php_backup.ini」として複製
vim php.ini #Vimで「php.ini」を開く
open -a MAMP #MAMPを起動
rm -i php_backup.ini # 「php_backup.ini」ファイルを削除
killall : 指定したプロセスに終了や停止命令のシグナルを送る。デフォルトでは「TERM」(プロセスの終了命令のシグナル)を送り、指定したプロセス名に該当するすべてのプロセスを終了させる。(プロセスIDで終了させる場合は、「kill」コマンドを使う。)
cd : カレントディレクトリを変更するコマンド。指定したディレクトリがカレントディレクトリになる。ディレクトリの指定が無ければ、ホームディレクトリがカレントディレクトリになる。
cp : ファイルをコピーするコマンド。指定したファイルを指定したファイル名でコピー(存在すれば上書き)する。コピー先のディレクトリの指定もできる。オプション「i」で、同名ファイルが存在する場合に上書きの確認を表示。
vim : vimを起動するコマンド。指定したファイルをvimで開く。
open : ディレクトリ(Finderで開く)、ファイル(デフォルトアプリケーションで開く)、URL(デフォルトブラウザで開く)を開くコマンド。オプション「-a」で、アプリケーションを指定してファイルを開く。(ファイルを指定しなければアプリケーションの起動のみ。)
rm : ファイルやディレクトリを削除するコマンド。オプション「-i」で削除前に確認を表示。(rmコマンドで削除すると復元できないので指定を間違えないように注意。)
- PHP php.iniでタイムゾーン (date.timezone) を設定する方法
- Mac OS XでMAMP内のPHPをコマンドラインから実行する
- PHP, 改行は”\n”ではなくPHP_EOLを使いましょ。
- MAMPの初期設定 – MAMPの使い方
https://memo.ag2works.tokyo/post-2571/
MAMP環境でPHPのタイムゾーン設定の確認と変更。 | memo メモ [AG2WORKS]
<a href="https://memo.ag2works.tokyo/post-2571/" target="_blank" rel="noopener">MAMP環境でPHPのタイムゾーン設定の確認と変更。 | memo メモ [AG2WORKS]</a>
この記事へのコメント
コメントの書き込みはまだありません。