侍エンジニア塾に入ってPHPの学習を進めています。
PHPのことがだんだんわかってきて自己解決できることが増えてきました。
今日はPHPの日時を取得するdate関数で日本時間を表示するのをやりました。
またあわせてcloud9のphp.iniの編集方法、編集箇所を探すのをやりました。
現在日時を表示させるphpファイル
環境としてAWSのCloud9を使っています。
ここで次のコードを打ち込みPHPファイルを作成。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>現在日時を表示</title> </head> <body> <?php print('現在日時:'.date('Y年m月d日 H:i:s')); ?> </body> </html>
cloud9でRunボタンを押してから、Previewを行うと
これによって今の日時が表示されました。
ところが時刻は「UTC」で表示されるので日本時間の9時間前になってしまいます。
phpのdate()関数でエラーが出た
以下のようなエラーがターミナルに表示されることがあります。
これはタイムゾーンが設定されていないからUTCにしたよ、という警告です。date.timezoneを日本の時刻に設定してあげないといけない。
これを日本時間で表示させるにはphp.iniという設定ファイルを編集しないといけない。
php.iniファイルの場所を探す
php.iniファイルの探し方について。
やり方は2つ。
(1)
PHP界隈では有名らしいけど以下だけ書かれたphpファイルを用意。
<?php phpinfo(); ?>
このファイルにアクセスするといろんな情報が出てくれる。
これが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と関連するところだけ表示させれば、
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 というコマンドでファイルの中身を見れる。
; 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を見てみる。
ここでも次のコマンドでファイルの中身を見る。
こっちのファイルには以下のようにかいてあった。
ここの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ファイル中のコロンはコメント行だと思われる。
;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アプリを公開したいなと思っているので、一応チェックできておいてよかったです。