ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Opened 8 years ago

Closed 7 years ago

#4433 closed defect (fixed)

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

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

Description (last modified by ShogoKawahara)

現象

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 (17)

comment:1 Changed 8 years ago by kiwpon

Description: modified (diff)

comment:2 Changed 8 years ago by kiwpon

Priority: minortrivial

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

comment:3 Changed 8 years ago 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 以前と同じ挙動をする保証がないため、現在出力を全てファイルに出力し、比較作業を行っています。

comment:4 Changed 8 years ago by imamura623

Keywords: OpenPNE2.12.19 removed
Milestone: OpenPNE2.14.6

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

comment:5 Changed 8 years ago by imamura623

Keywords: OpenPNE2.12.20 added
Milestone: OpenPNE2.14.7

comment:6 Changed 7 years ago by kiwpon

Keywords: 確認中 added
Owner: changed from nobody to niryuu

現在のコミット状況

comment:7 Changed 7 years ago by ShogoKawahara

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

comment:8 Changed 7 years ago by ShogoKawahara

Description: modified (diff)

comment:9 Changed 7 years ago by ShogoKawahara

Keywords: テスト待ち added; 確認中 removed

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

comment:10 Changed 7 years ago by kiwpon

Keywords: 差し戻し added; テスト待ち removed

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

comment:11 Changed 7 years ago by niryuu

Status: newassigned

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

comment:12 Changed 7 years ago 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

comment:13 Changed 7 years ago by ShogoKawahara

Owner: changed from niryuu to ShogoKawahara
Status: assignednew

comment:14 in reply to:  12 Changed 7 years ago by kiwpon

Keywords: 確認中 added; 差し戻し removed

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

comment:15 Changed 7 years ago by ebihara

Keywords: 差し戻し added; 確認中 removed
  • 以下のエラーに対する対応がないように見えますが大丈夫でしょうか
    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 の定義をおこなうのが望ましいと思います

comment:16 Changed 7 years ago 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 = ""

comment:17 in reply to:  15 Changed 7 years ago by kiwpon

Keywords: 差し戻し removed
Resolution: fixed
Status: newclosed

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 を読み込むスクリプトについては対応しない方向でいきます。 このチケットは閉じます。

Note: See TracTickets for help on using tickets.