Ticket #4433 (closed defect: fixed)

Opened 7 years ago

Last modified 7 years ago

OpenPNE2 がPHP5.3 環境に対応していない

Reported by: kiwpon Assigned to: kawahara
Priority: trivial Milestone: OpenPNE2.14.7
Component: 指定しない Version: 2.12.x & 2.14.x
Keywords: OpenPNE2.12.20 Cc:

Description (Last modified by kawahara)

現象

OpenPNE2 をPHP5.3 環境で動かした場合、SNS名を登録できないといった不具合が発生する

原因

parse_ini_file() の仕様変更によるもの

ref: http://www.php.net/manual/ja/function.parse-ini-file.php

修正内容

PHPのバージョンが、PHP5.3.0以降の場合 parse_ini_file() の第3引数に INI_SCANNER_RAW を指定する。

PHP5.3で正常に読み込めない*.ini を修正する。

関連情報

Change History

04/26/10 17:44:37 changed by kiwpon

  • description changed.

05/06/10 11:59:54 changed by kiwpon

  • priority changed from minor to trivial.

現時点で調査が進んでいません。見送りの可能性が高いという意味で優先度を下げます。

05/18/10 10:54:08 changed by niryuu

PHP5.1.6 と PHP5.3 の対照環境で調査中です。

主立ったバグは parse_ini_file 関数のデフォルト動作の仕様変更 http://www.php.net/manual/ja/function.parse-ini-file.php http://d.hatena.ne.jp/Kenji_s/20091203/1259805303 で、 HTTP リクエストのバリデーション用の定義ファイルに影響しています。

parse_ini_file 関数のデフォルト動作では、階層が一段ずれてしまうなどの致命的な不具合を確認しています。INI_SCANNER_RAW オプションを指定すると、5.2以前と同様の動作をするということになっており、そのように変更を加えたところ、概ね正常に動作しました。

しかし、その後別のバグで特定のファイルに対して parse_ini_file が Falseを返すことがわかり、これだけでは問題は解決しません。全 ini ファイルをテストしてみたところ、769 ファイルのうち 32 件が正常にパースされませんでした。その 32 件が関わる挙動をブラウザでテストしたところ、多くの誤動作が確認されました。

このまま 32 ファイルを修正すればかなりの不具合を排除できる可能性がありますが、 parse_ini_file の出力はどちらのオプションでも php5.2 以前と同じ挙動をする保証がないため、現在出力を全てファイルに出力し、比較作業を行っています。

05/19/10 13:38:59 changed by imamura623

  • keywords deleted.
  • milestone deleted.

詳細な調査およびテストが必要なので、次回リリースに見送ります。

05/19/10 13:52:07 changed by imamura623

  • keywords set to OpenPNE2.12.20.
  • milestone set to OpenPNE2.14.7.

07/22/10 16:23:02 changed by kiwpon

  • keywords changed from OpenPNE2.12.20 to OpenPNE2.12.20 確認中.
  • owner changed from nobody to niryuu.

現在のコミット状況

07/26/10 11:22:58 changed by kawahara

2.12.x で、このチケットに関するコミットがありました

07/26/10 11:42:08 changed by kawahara

  • description changed.

07/26/10 11:44:21 changed by kawahara

  • keywords changed from OpenPNE2.12.20 確認中 to OpenPNE2.12.20 テスト待ち.

PHP5.3で、非推奨となった関数や利用法などがされている箇所が 多く存在するため、大量のWarningおよびNoticeが発生していますが このチケットでは一先ずの動作を目的としているためスルーします。 (別対応?)

07/29/10 21:26:08 changed by kiwpon

  • keywords changed from OpenPNE2.12.20 テスト待ち to OpenPNE2.12.20 差し戻し.

Deprecated のエラーなどもアプリ側で抑えるよう対応をお願いします。

08/03/10 14:16:52 changed by niryuu

  • status changed from new to assigned.

trunk - r13628 2.14.x - r13630 2.12.x - r13629 でコミットしました。

(follow-up: ↓ 14 ) 08/04/10 12:37:21 changed by kiwpon

  • PHP5.3 未満のバージョンの場合、config.php でnotice が出ます。

[Wed Aug 04 12:00:57 2010] [error] [client 203.143.101.162] PHP Notice: Use of undefined constant E_DEPRECATED - assumed 'E_DEPRECATED' in /OPENPNE_DIR/config.php on line 233, referer: http://sns.example.com/

  • PHP5.3 環境にて日記作成画面にWarningが出ます。

Warning: syntax error, unexpected $end in /OPENPNE_DIR/webapp/modules/pc/validate/page/h_diary_add.ini on line 21 in /OPENPNE_DIR/webapp/lib/OpenPNE/Validator.php on line 78

08/04/10 18:47:46 changed by kawahara

  • owner changed from niryuu to kawahara.
  • status changed from assigned to new.

(in reply to: ↑ 12 ) 08/04/10 20:04:13 changed by kiwpon

  • keywords changed from OpenPNE2.12.20 差し戻し to OpenPNE2.12.20 確認中.

comment:12 の問題について以下のリビジョンにて対応しました。

(follow-up: ↓ 17 ) 08/04/10 20:33:38 changed by ebihara

  • keywords changed from OpenPNE2.12.20 確認中 to OpenPNE2.12.20 差し戻し.
  • 以下のエラーに対する対応がないように見えますが大丈夫でしょうか
     Warning: syntax error, unexpected $end in /OPENPNE_DIR/webapp/modules/pc/validate/page/h_diary_add.ini on line 21 in /OPENPNE_DIR/webapp/lib/OpenPNE/Validator.php on line 78
    
  • comment:14 の修正だとマイナーバージョンアップ時に config.php の変更が発生します。ユーザに変更を強いることを避けたい場合、やや冗長になってしまいますが、 config.php を読み込むすべての場面(public_html/config.inc.php, bin/config.inc.php, setup/sql/mysql41/option/new_biz_schedule_converter.php, setup/sql/mysql40/option/new_biz_schedule_converter.php, setup/script/update/config.inc.php, setup/script/upgrade/config.inc.php)においても E_DEPRECATED の定義をおこなうのが望ましいと思います

08/04/10 20:37:53 changed by kiwpon

以下のエラーに対する対応がないように見えますが大丈夫でしょうか

trac では表示されませんが、取り込まれています。(改行コードの変更)

$ svn diff -r 13632:13633 https://trac.openpne.jp/svn/OpenPNE/branches/stable-2.12.x/
Index: config.php.sample
===================================================================
--- config.php.sample   (revision 13632)
+++ config.php.sample   (revision 13633)
@@ -227,6 +227,10 @@
 // デバッグ、エラーハンドリング、ログ設定
 ///

+if (!defined('E_DEPRECATED')) {
+    define('E_DEPRECATED', 8192);
+}
+
 error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED);

 switch(OPENPNE_DEBUGGING) {
Index: webapp/modules/pc/validate/page/h_diary_add.ini
===================================================================
--- webapp/modules/pc/validate/page/h_diary_add.ini     (revision 13632)
+++ webapp/modules/pc/validate/page/h_diary_add.ini     (revision 13633)
@@ -18,4 +18,4 @@

 [category]
 type = "string"
-default = ""
\ No newline at end of file
+default = ""

(in reply to: ↑ 15 ) 08/04/10 21:48:30 changed by kiwpon

  • keywords changed from OpenPNE2.12.20 差し戻し to OpenPNE2.12.20.
  • status changed from new to closed.
  • resolution set to fixed.

Replying to ebihara

* comment:14 の修正だとマイナーバージョンアップ時に config.php の変更が発生します。ユーザに変更を強いることを避けたい場合、やや冗長になってしまいますが、 config.php を読み込むすべての場面(public_html/config.inc.php, bin/config.inc.php, setup/sql/mysql41/option/new_biz_schedule_converter.php, setup/sql/mysql40/option/new_biz_schedule_converter.php, setup/script/update/config.inc.php, setup/script/upgrade/config.inc.php)においても E_DEPRECATED の定義をおこなうのが望ましいと思います

今回はconfig.php の変更が必須だということを強めにアピールするという条件で、config.php を読み込むスクリプトについては対応しない方向でいきます。 このチケットは閉じます。