PHPにて日本時間が取得できない場合はこうしろ!

海外サーバーでPHPを使用していると、取得した時間が9時間過去の時間であることがあります。結構はまったのでメモしておきます。

例えば、実際には23時なのですが、PHPで時間を取得すると14時になっていたりします。

この場合の対処方法をご紹介します。

私の場合は、strftime()を使用していました。

よく紹介されている方法は、以下のいすれかを時間取得前に呼び出しタイムゾーンを変更するというものでした。が全く効果ありません。


date_default_timezone_set(‘Asia/Tokyo’);
putenv("TZ=JST-9");

次にロケールを確認してみました。

# locale
LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=

ja_JPになっていない場合は、以下を確認して下さい。

# cat /etc/sysconfig/i18n
LANG="ja_JP.UTF-8"
SYSFONT="latarcyrheb-sun16"

viにて変更して以下のコマンドで反映させます。念のためマシンを再起動した方が良いかもしれません。

# . /etc/sysconfig/i18n

しかし、まだ日本時間が取得できません。

最後にphp.iniを確認してみましょう。私の場合は、/etc/php.iniにありました。「date.timezone」がコメント化されていると思います。コメントを外して、「Asia/Tokyo」に設定しましょう。


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

しかし、残念なことにこれでも日本時間が取得できましぇん(泣)
かくなる上は、apache再起動です。

# /etc/rc.d/init.d/httpd restart

これで日本時間が取得できました。めでたし♪

MySQLデータベースを更新する

WordPressでログインが出来なくなった場合に復旧のため直接MySQLデータベースを更新する必要があります。

もしもの時のためにコマンドラインからMySQLデータベースを更新する方法を調べてみました。

# mysql -u root -p
Enter password:
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| test               |
| wp_test            |
| wp_sample          |
+--------------------+
9 rows in set (0.00 sec)
■WordPressのデータベースに接続する
mysql> use wp_test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

■テーブル一覧を表示する
mysql> show tables;
+-----------------------------+
| Tables_in_wp_test           |
+-----------------------------+
| wp_test_commentmeta         |
| wp_test_comments            |
| wp_test_links               |
| wp_test_mappress_maps       |
| wp_test_mappress_posts      |
| wp_test_options             |
| wp_test_postmeta            |
| wp_test_posts               |
| wp_test_term_relationships  |
| wp_test_term_taxonomy       |
| wp_test_termmeta            |
| wp_test_terms               |
| wp_test_usermeta            |
| wp_test_users               |
+-----------------------------+
14 rows in set (0.00 sec)

■「siteurl」「home」の内容を確認する。
mysql> select * from wp_test_options where option_name = 'siteurl';
+-----------+-------------+--------------------------+----------+
| option_id | option_name | option_value             | autoload |
+-----------+-------------+--------------------------+----------+
|         1 | siteurl     | https://horiejoho.dip.jp | yes      |
+-----------+-------------+--------------------------+----------+
1 row in set (0.00 sec)

mysql> select * from wp_test_options where option_name = 'home';
+-----------+-------------+--------------------------+----------+
| option_id | option_name | option_value             | autoload |
+-----------+-------------+--------------------------+----------+
|         2 | home        | https://horiejoho.dip.jp | yes      |
+-----------+-------------+--------------------------+----------+
1 row in set (0.00 sec)

■「siteurl」を変更してみます
mysql> update wp_test_options set option_value = 'https://horiejoho.dip.jp/wp/' where option_name = 'siteurl';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

■変更されているか確認します
mysql> select * from wp_test_options where option_name = 'siteurl';
+-----------+-------------+------------------------------+----------+
| option_id | option_name | option_value                 | autoload |
+-----------+-------------+------------------------------+----------+
|         1 | siteurl     | https://horiejoho.dip.jp/wp/ | yes      |
+-----------+-------------+------------------------------+----------+
1 row in set (0.00 sec)

■元に戻しておきましょうね
mysql> update wp_test_options set option_value = 'https://horiejoho.dip.jp' where option_name = 'siteurl';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

■「siteurl」が元に戻っていることを確認します
mysql> select * from wp_test_options where option_name = 'siteurl';
+-----------+-------------+--------------------------+----------+
| option_id | option_name | option_value             | autoload |
+-----------+-------------+--------------------------+----------+
|         1 | siteurl     | https://horiejoho.dip.jp | yes      |
+-----------+-------------+--------------------------+----------+
1 row in set (0.00 sec)

mysql> exit
Bye

「home」を変更する場合は、「siteurl」を「home」に変更して下さい。

MySQLのデータベースへ接続する方法

MySQLのデータベースへ接続する方法です。MySQLへログインしたら、データベース一覧を表示します。
接続するデータベース名を確認したら、「use データベース名」コマンドを使用して接続します。

# mysql -u root -p
Enter password:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| test               |
| wp_test            |
| wp_sample          |
+--------------------+
9 rows in set (0.00 sec)

mysql> use wp_test;
Database changed

簡単でしたね♪