Cloud9でphp.iniを編集しdate関数で日本時間を表示する

侍エンジニア塾に入ってPHPの学習を進めています。
PHPのことがだんだんわかってきて自己解決できることが増えてきました。

今日はPHPの日時を取得するdate関数で日本時間を表示するのをやりました。
またあわせてcloud9のphp.iniの編集方法、編集箇所を探すのをやりました。

現在日時を表示させるphpファイル

環境としてAWSのCloud9を使っています。

ここで次のコードを打ち込みPHPファイルを作成。

cloud9でRunボタンを押してから、Previewを行うと
これによって今の日時が表示されました。

ところが時刻は「UTC」で表示されるので日本時間の9時間前になってしまいます。

phpのdate()関数でエラーが出た

以下のようなエラーがターミナルに表示されることがあります。

HP 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 the timezone ‘UTC’ for now, but please set date.timezone to select your timezone. in

これはタイムゾーンが設定されていないからUTCにしたよ、という警告です。date.timezoneを日本の時刻に設定してあげないといけない。

これを日本時間で表示させるにはphp.iniという設定ファイルを編集しないといけない。

php.iniファイルの場所を探す

php.iniファイルの探し方について。

やり方は2つ。

(1)
PHP界隈では有名らしいけど以下だけ書かれたphpファイルを用意。

このファイルにアクセスするといろんな情報が出てくれる。

これがCloud9の情報。

date.timezoneがno valueになっている。ここをAsia/Tokyoにしないといけない。

読み込まれているphp.iniの場所っぽいとこ。

これを見るとphp.iniに関連しそうなのが以下の3つでてきた。

Configuration File (php.ini) Path /etc/php-5.6.conf:/etc
Loaded Configuration File /etc/php.ini
Scan this dir for addtional .ini files /etc/php-5.6.d/

(2)php -iコマンド

Cloud9のターミナルからphp -iというコマンドを使っても確認ができる。
パイプでつないでphp.iniと関連するところだけ表示させれば、

php -i | grep php.ini

Configuration File (php.ini) Path => /etc/php-5.6.conf:/etc
Loaded Configuration File => /etc/php.ini
/etc/php-5.6.d/php.ini

と出力される。

どのphp.iniを編集するか?

①のファイルを探してみる。

ところが/etc/php-5.6.conf:/etcというパスが無い。

似たようなパスで以下のがある。
/etc/php-5.6.conf/

こっちを見てみる。

lsというのはリストの略で対象ディレクトリ以下のファイルやディレクトリの一覧を見せてくれるコマンド。

ls /etc/php-5.6.conf/
とやるとREADMEというファイルのみがあった。

このディレクトリにはREADMEファイルしかない。中身を見てみる。

more README というコマンドでファイルの中身を見れる。

; Copy or create the php.ini file here just for php 5.6.
; The php.ini file in this directory will take precendence
; over /etc/php.ini for php 5.6 only

「このディレクトリ内のphp.iniファイルは、/etc/php.iniより優先されます」と翻訳できる。

ということはこのディレクトリにphp.iniファイルを作成すればよいのではないかと思われる。

③の/etc/php-5.6.d/php.iniを見てみる。

ここでも次のコマンドでファイルの中身を見る。

more /etc/php-5.6.d/php.ini

こっちのファイルには以下のようにかいてあった。

; The php.ini file has moved to /etc/php-5.6.ini.

ここのphp.iniの内容は、/etc/php-5.6.iniに移動したよ、と書かれているので③のファイルは無視しよう。

代わりに移動した先の④で/etc/php-5.6.iniは見ておかないといけない。

ということでどのphp.iniを編集するかだが、

① /etc/php-5.6.conf/ にphp.iniを作成する
② /etc/php.iniを編集する
④ /etc/php-5.6.iniを編集する

この3つのどれかかも。

Cloud9でphp.iniを編集する(エディタnanoコマンド)

ファイルの編集の仕方としてエディタのnanoコマンドについて整理する。

Cloud9といえば画面左側にディレクトリのツリーが見えるのでここでファイルを開けば、通常は右側にエディタが開けるんだけど。

/etc/というディレクトリはツリーで表示されないので。(どうやったら表示できんの?)

ターミナルからnanoというコマンドを使ってファイルを編集する方法をやります。

プラスボタンから→Mew Terminalをクリックしてターミナルを表示させます。

nano ファイル名

とすると、ターミナル上に非常に使いにくいエディタが出てきます。このnanoというエディタ、スクロールバーも行番号もないし使いにくいです。

タイムゾーンを変更するにはphp.iniのファイルの中に以下の項目があるので

;date.timezone

これを

date.timezone = Asia/Tokyo

とすればよい。

ところでdate.timezoneと書かれている部分が900行近くにあるのでいちいちマウスやキーボードの下矢印で移動させるのがつらい。

検索も使えないし。

nanoエディタだと「Ctrl+W」で検索ができるらしいけど、Cloud9上の「Ctrl+W」ショートカットキーと競合してて、Cloud9の方が優先されて、なんとブラウザが閉じるコマンドなんだよ(#^ω^)

だからnanoの検索ショートカットキーが使えなかった。

1.まず/etc/php-5.6.conf/php.iniを作成してみる→Permission denied

2./etc/php.iniを修正してみる→Permission denied

3./etc/php-5.6.iniを修正してみる→Permission denied

全部駄目じゃん。

と思ったら sudo nano ファイル名
とやれば編集できることがわかった。

sudo nano /etc/php.ini
でファイルを開ける。

「Ctrl+c」で現在の行番号が表示されるのでこれを活用。

該当箇所を編集する。iniファイル中のコロンはコメント行だと思われる。

;20181209 edit
;date.timezone
date.timezone = Asia/Tokyo

このように変更した。

ファイルを保存するには「Ctrl+X」でエディタ終了。

Save modified bufferと出てくるので、Yキーを押す。

File Name to Write: /etc/php.iniと出てくるのでEnterキーを押す

これでファイルを上書き保存できた。

いったんサーバーを停止させて再起動。

ブラウザでアクセスすると‥

UTC+9の日本時間にすることができた。

レンタルサーバーで現在日時を表示させてみる。

・エックスサーバー
・ロリポップ
・さくらレンタルサーバー

この3つのレンタルサーバーだけチェックしてみました。
いずれもphp.iniファイルの編集などは必要なくデフォルトのままで問題ありませんでした。

ちなみにphp.iniの中身のtimezoneがどうなっているかというと以下の図のようになっていました。


→date.timezone = Asia/Tokyo
となっているので日本時間で表示できたようです。

私は最終的にはレンタルサーバー上でPHPアプリを公開したいなと思っているので、一応チェックできておいてよかったです。