結局、PHP 5.3系では timezone 設定がらみのワーニングが消せなかった

もう午前4時だ・・・俺はまだ十日市にいる。

ずっと PHP のインストールをしていたのだ。

今日時点で最新の PHP 5.3.8 をインストールしたところ、phpinfo の実行で、

Warning: phpinfo() [function.phpinfo]: 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 in /var/apache/htdocs/test.php on line 1

というようなワーニングが出てしまう。
どうも、Default timezone と php.ini で設定している timezone が同じでないと警告されるようなのだ。セキュリティの問題なのかな?よくわからんが、5.3系からの仕様らしい。

php.ini 内に

date.timezone = Asia/Tokyo

という記述を加えれば解決するらしいのだが、ここで困った問題が。

configure した時、特に --with-config-file-path は指定していないので、出来上がった php は /usr/local/lib/php.ini を参照するはずである。
なのに、phpinfo で表示されている Configuration File (php.ini) Path は /usr/local/php/lib を指しているのである。

/usr/local/lib/php.ini に date.timezone の記述を追加し、httpd を再起動しても状況変わらず。だからといって、/usr/local/php/lib/php.ini に同じものを置いても、やっぱり状況変わらずなのだ。どうにも php.ini の内容が反映していない様子。(ちなみに、ブラウザのキャッシュが・・・というような素人じみた落ちは無い(^^;)

何度か --with-config-file-path オプションをつけて再インストールしてみたのだが、何か php 動かなくなっちゃったし(^^;
make clean してやり直していたのだが、make clean した後でソース展開したディレクトリも消して、ソースを展開するところからやり直せばよかったのかな・・・
どうも、make clean だけではさっぱりきれいにならないようである。

結局、解決策は、

5.2系をインストールする

・・・である(^^;

元々ユーザー要件としては「PHP 5.2 のインストール」となっていたので、その最新の 5.2.17 をインストールした。
5.2系は良いなあ。
Default timezone と php.ini で設定している timezone が同じでなくとも、ワーニングなんか吐かない。
そして、php.ini に date.timezone の記述を追加して httpd を再起動すれば、phpinfo の date.timezone directive に関する情報も、すぐに Asia/Tokyo に変更された。

う~ん・・・何か、もっと configure の時に色々とオプションが必要だったんかなあ?

ま、今回は 5.2.17 でまったく問題無いんだけど、今後のことを考えると、5.3系で上手くいかなった理等を調べておきたかったな。

ま、もう、今日は駄目です(^^;

今から岩国まで帰れるかなあ・・・

トラックバック(0)

このブログ記事を参照しているブログ一覧: 結局、PHP 5.3系では timezone 設定がらみのワーニングが消せなかった

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/1776

コメント(5)

Default timezone というのは OS のタイムゾーンのことでしょうか? PHP にとっては php.ini ファイルの date.timezone ディレクティブの値がデフォルト値です。


Loaded Configuration File の値がどうなっているのか知りたいですね。ファイルを配置したもののパーミッションの関係で読み込みできないのか、それともほかの php.ini ファイルが読み込まれ、date.timezone の値が上書きされてしまっているのか。


make で止めてシステムにインストールせずに sapi/cli/php を使うのであれば php -i | grep Configuration で調べることができます


現状のPHP環境はそのままで、PHP 5.4 を試す
http://www.1x1.jp/blog/2011/06/try_new_php_without_update_current_version.html


--with-config-file-path が指定されていない場合に Configuration File (php.ini) Path の値が /usr/local/php/lib になるのは正常な状態です。


php.ini ファイル読み込みの優先順位は次のページに書かれています

http://www.php.net/manual/ja/configuration.file.php


次善策としてはエラーメッセージに書かれているように
「date_default_timezone_set('Asia/Tokyo');」の行をスクリプトに追加するか、スクリプトごとに追加することがめんどうなら、.htaccess で指定します。


<IfModule mod_php5.c>
php_value date.timezone Asia/Tokyo
</IfModule>


PHP 5.4 からは date.timezone ディレクティブもしくは date_default_timezone_set() 関数がセットされていなければ、 UTC が使われます。

http://svn.php.net/viewvc/php/php-src/tags/php_5_4_0beta1/NEWS?revision=316805&view=markup

加賀谷さん、ありがとうございます。
参考になります。

>Default timezone というのは OS のタイムゾーンのことでしょうか?

そうです。
状況としては、OS のタイムゾーンは Asia/Tokyo が指定されていました。しかし、おっしゃるように php.ini が正常に読まれていないためだと思われますが、PHP 側はタイムゾーンが空値(指定無し)と判断しており、件のワーニングが出ているようでした。
(phpinfo で、date.timezone ディレクティブの値が空値表示されている)

/usr/local/php/lib の下にも php.ini を置いてみましたが、状況が変わらなかったので、今回はわけわからず 5.4 系を使うことにしました。

今度、時間がある時に調査してみたいとは思っていますが・・・

.htaccess の使用も考えたのですが、今回は「システム屋さんではない Web 屋さんが、出来合いのプログラムを使う」ケースも考えられたので、.htaccess を置いてくれでは混乱しそうだなあと(^^;

.htaccess だとわかりずらいですよね。ほかの記事を拝読すると、RedHat 系をお使いのようですが、EPEL、iuscommunity、remi などの外部リポジトリを利用できないご事情があるのでしょうか?ご自分でコンパイルする方式だとセキュリティリリースがでるたびにコンパイルしなければならなくなり、維持管理がめんどうになりませんかね。

今回、元からインストールされていた1.x系と、新たに入れる2.x系を共存させたかったので、2.x系はソースからmakeして入れました。
一応、他のサーバでもソースから入れて、手動でバージョンアップに対応しているものがあるので併せて管理すればいいだけなのですが、数が増えてくると面倒臭くなりそうです(^^;

加賀谷さん

結局、php.ini の修正で問題ありませんでした。別のサーバで同様の作業をする機会があったので試してみたところ、
date.timezone = Asia/Tokyo
の記述をするだけで問題ありませんでした。

この時は、Apache を再起動しても php.ini の新しい内容が(/usr/local/php/lib 以下に置いても)反映しないなど不安定な動きをしていたので、そちらの問題だったのかも・・・

色々とご教示いただきありがとうございました。

コメントする

このブログ記事について

このページは、shinodaが2011年9月21日 04:11に書いたブログ記事です。

ひとつ前のブログ記事は「「暮坪そば」の名付け親は海原雄山という人だと・・・」です。

次のブログ記事は「9/11のリーグ戦で息子が先発したのだが・・・」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら