LOGIN ID Password Auto Login Register Now! Lost Password?
XUGJ Forum

俺的XOOPS Cube Legacy(嘘)

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています

投稿ツリー


前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2010/11/19 13:35
Marijuana  Ensign 居住地: 明後日から  投稿数: 272
http://marijuana.xsrv.jp/index.php?moddir=downloads&action=single&lid...

いい加減うちの環境をPHP5.3にしたいなぁと思いつつ、ついでにSmarty他も変えちゃえで作ってみただけです
興味のある人は遊んでみてください
投票数:7 平均点:5.71
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2010/11/24 20:59 | 最終変更
orrisroot  2nd Class   投稿数: 14
こんにちは.

これいいですね.
コード上の潜在バグの修正も入ってるみたいですし,折角なので改良点を拝見してノウハウとして整理してみました.
※は個人的なコメントです.

1. サードベンダーのライブラリアップデート
○ Smarty のアップデート
http://www.xugj.org/modules/d3forum/index.php?topic_id=1021
- 各テンプレート修正
a) <{ }>で 属性=値 を 属性="値" に置換
b) }> の前の空白を詰める

○ PHPMailer のアップデート
http://marijuana.xsrv.jp/index.php?moddir=downloads&action=single&lid...

2. PHP 5.3 対応
○ クラス継承時のコンストラクタ
html/modules/legacy/kernel/Legacy_Module.class.php
http://xoopscube.jp/forum/6687
http://marijuana.xsrv.jp/modules/wordpress/?p=268

○ Delegate 実行時の参照
html/core/XCube_Delegate.class.php
http://marijuana.xsrv.jp/modules/wordpress/?p=268 コメント欄

○ Module の Preload,キャッシュ登録バグの修正
html/modules/legacy/kernel/Legacy_Controller.class.php
--- html/modules/legacy/kernel/Legacy_Controller.class.php.orig 2010-03-27 19:45
:48.000000000 +0900
+++ html/modules/legacy/kernel/Legacy_Controller.class.php      2010-11-24 19:32
:24.337074000 +0900
@@ -700,8 +700,7 @@
                                                
                                                                if (XC_CLASS_EXI
STS($className) && !isset($this->_mLoadedFilterNames[$className])) {
                                                                        $this->_mLoadedFilterNames[$className] = true;
-                                                                       $instance =& new $className($this);
-                                                                       $this->addActionFilter($instance);
+                                                                       $this->addActionFilter(new $className($this));
                                                                }
                                                        }
                                                }
@@ -749,7 +748,7 @@
                if ($this->mRoot->mContext->mModule != null && $this->isEnableCacheFeature()) {
                        $cacheInfo =& $this->mRoot->mContext->mModule->createCacheInfo();
                        
-                       $this->mSetModuleCachePolicy->call($cacheInfo);
+                       $this->mSetModuleCachePolicy->call(new XCube_Ref($cacheInfo));
                        
                        if ($this->mRoot->mContext->mModule->isEnableCache()) {
                                //

○ parse_ini_file 関数の互換性
html/core/XCube_Root.class.php
html/core/XCube_Theme.class.php
http://marijuana.xsrv.jp/modules/wordpress/?p=268
以下の他のファイルも修正
html/core/XCube_Theme.class.php
html/modules/legacyRender/class/theme.php
※なぜか手元の PHP 5.3.3 (Fedora14)ではこの修正なしでも動作する模様.もしかするとこの地雷は5.3の初期の版だけかもしれない.

○ 一般設定のオプション値
html/modules/legacy/admin/class/ModuleInstallInformation.class.php
http://marijuana.xsrv.jp/index.php?moddir=downloads&action=single&lid... 更新履歴?
※もしかすると foreach で $info を回しているところで unset($info) が抜けているところを修正するだけでいいのかも?
Legacy_ModinfoX2DBReader::loadPreferenceInformations()
Legacy_ModinfoX2DBReader::loadBlockInformations()

○ =& new を = new に置換
find html -name '*.php' -type f -exec sed -e '/=\s*$/N;/=\s*&\s*$/N;/new\s*$/N;s/=\(\s*\)&\(\s*\)new\(\s\)/=\1\2new\3/g' -i {} \;
こんな感じで一発置換可

3. 古すぎるのは捨て捨て
○ old_functions.php と old_theme_functions.php の削除
http://marijuana.xsrv.jp/index.php?moddir=downloads&action=single&lid...

○ Database::getInstance() の撤廃
find html -name '*.php' -type f -exec sed -e 's/\(\s\)Database::getInstance/\1XoopsDatabaseFactory::getDatabaseConnection/g' -i {} \;
こんな感じで一発置換可

4. その他
○ Snoopy への set_submit_xml 関数の追加
html/class/snoopy.php
http://www.xugj.org/modules/bulletin/index.php?page=article&storyid=182 コメント欄

○ 管理画面メニューの show 変数
html/modules/legacy/kernel/Legacy_Module.class.php
--- html/modules/legacy/kernel/Legacy_Module.class.php.orig     2010-11-24 20:24:06.380952000 +0900
+++ html/modules/legacy/kernel/Legacy_Module.class.php  2010-11-24 20:23:38.838168000 +0900
@@ -614,13 +614,15 @@
                                $this->mXoopsModule->adminmenu[] = array(
                                        'link' => $root->mController->getPreferenceEditUrl($this->mXoopsModule),
                                        'title' => _PREFERENCES,
-                                       'absolute' => true);
+                                       'absolute' => true,
+                                       'show' => true);
                }
                        
                if ($this->mXoopsModule->hasHelp()) {
                        $this->mXoopsModule->adminmenu[] = array('link' =>  $root->mController->getHelpViewUrl($this->mXoopsModule),
                                                      'title' => _HELP,
-                                                     'absolute' => true);
+                                                     'absolute' => true,
+                                                     'show' => true);
                }
                
                $this->_mAdminMenuLoadedFlag = true;
※よくわかっていない.

○ Legacy_CommentFilterForm の com_status リクエスト値
html/modules/legacy/admin/forms/CommentFilterForm.class.php.orig
--- html/modules/legacy/admin/forms/CommentFilterForm.class.php.orig    2010-11-24 20:27:44.000000000 +0900
+++ html/modules/legacy/admin/forms/CommentFilterForm.class.php 2010-11-24 20:49:21.337485000 +0900
@@ -99,8 +99,8 @@
                        $this->_mCriteria->add(new Criteria('com_ip', xoops_getrequest('com_ip')));
                }
        
+               $this->mNavi->addExtra('com_status', intval(xoops_getrequest('com_status')));
                if (xoops_getrequest('com_status') > 0) {
-                       $this->mNavi->addExtra('com_status', xoops_getrequest('com_status'));
                        $this->_mCriteria->add(new Criteria('com_status', xoops_getrequest('com_status')));
                }
※よくわかっていない.

こんなところでしょうか.
とりあえず 2. だけやれば PHP 5.3 で動きそうですね.

※すみません.変なところを見つけたので初回投稿からちょっと変更しました.
投票数:3 平均点:10.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2010/11/24 22:17
Marijuana  Ensign 居住地: 明後日から  投稿数: 272
詳細な解説ありがとうございます。
Smarty絡みはmixiの日記でちょろっと書いてるけどマイミク限定(苦笑)

引用:
※なぜか手元の PHP 5.3.3 (Fedora14)ではこの修正なしでも動作する模様.もしかするとこの地雷は5.3の初期の版だけかもしれない.
X2用テーマなどmanifesto.ini.phpがなければ、この部分は問題ありません。

引用:
○ 管理画面メニューの show 変数
○ Legacy_CommentFilterForm の com_status リクエスト値
この2つはSmartyのコンパイルキャッシュでNoticeが出るのでその対策です。
他にもあるのですが、修正していません。
今まではSmarty側で隠ぺいしていたので出てなかったのですが、Smarty3になって変更になっています。
template.phpで$this->error_reporting = E_ALL & ~E_NOTICE;にしていますが、ここはPHPデバグに合わせるか、Smartyデバグ以外は0にするかにした方が良いかもしれないですね。

参照になってる部分で気づいてないだけで、他も問題が出る箇所があると思うので、XCL2.2のコードとも比べてみると良いかも知れません。

どっちにしろ現状でXCL2.1は、PHP5.3系で使用するのは現実的ではないですね。
#2.2でもモジュールが対応してないとダメなので現状はどのみちお勧め出来るものではありません。
投票数:4 平均点:10.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2010/11/24 23:49
orrisroot  2nd Class   投稿数: 14
ども.

引用:
詳細な解説ありがとうございます。
Smarty絡みはmixiの日記でちょろっと書いてるけどマイミク限定(苦笑)
あ,mixi日記に記事ごとの公開範囲なんて設定できたんだですね..ということで読んでみたいのでマイミクリクエストを贈りました.

引用:
引用:
※なぜか手元の PHP 5.3.3 (Fedora14)ではこの修正なしでも動作する模様.もしかするとこの地雷は5.3の初期の版だけかもしれない.
X2用テーマなどmanifesto.ini.phpがなければ、この部分は問題ありません。
ん?調べてみたところ Parse Error になるのは PHP 5.3.0 だけでした.5.3.1以降は大丈夫.ということは,他にも理由があるはず.すみません.まだ分かってません.

引用:
どっちにしろ現状でXCL2.1は、PHP5.3系で使用するのは現実的ではないですね。
#2.2でもモジュールが対応してないとダメなので現状はどのみちお勧め出来るものではありません。
八方塞がりじゃん..2.2は(新しいというだけで)マイナーバージョンが2,3個上がるまでは怖くて本番環境に使えないし,2.1でもうしばらく(2,3年くらい)はより安定重視の保守が続くといいなぁと.

確かに,すでに非公式な自分専用のパッチ群適用による自己責任な運用ですので自分達はそんなに困らないかも知れませんが,周りにお勧めできないのが難点ですね.
投票数:2 平均点:10.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2010/11/25 10:13
Marijuana  Ensign 居住地: 明後日から  投稿数: 272
引用:
ん?調べてみたところ Parse Error になるのは PHP 5.3.0 だけでした.5.3.1以降は大丈夫.ということは,他にも理由があるはず.すみません.まだ分かってません.
んーXC_PARSE_INI_FILEの違いだけのはずなので、そこが平気ならXC_PARSE_INI_FILE自体要らないと思うけど・・・


引用:
八方塞がりじゃん..2.2は(新しいというだけで)マイナーバージョンが2,3個上がるまでは怖くて本番環境に使えないし,2.1でもうしばらく(2,3年くらい)はより安定重視の保守が続くといいなぁと.
PHP5.3で動かすコアが無いから、しょうがないのでは?
PHP4からPHP5の時は、コアも割と対応早かったけど、XCLは2.2からだし。。。
投票数:3 平均点:10.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/11/25 19:13
orrisroot  2nd Class   投稿数: 14
○ Preload の登録バグ
xcl_m.7z に加えて,この追加も必要ですね.
html/core/XCube_Controller.class.php
--- html/core/XCube_Controller.class.php.orig   2010-11-25 18:24:12.227136000 +0900
+++ html/core/XCube_Controller.class.php        2010-11-25 18:24:58.996713000 +0900
@@ -436,8 +436,7 @@
                                                
                                                if (XC_CLASS_EXISTS($className) && !isset($this->_mLoadedFilterNames[$className])) {
                                                        $this->_mLoadedFilterNames[$className] = true;
-                                                       $instance =& new $className($this);
-                                                       $this->addActionFilter($instance);
+                                                       $this->addActionFilter(new $className($this));
                                                }
                                        }
                                }
これがないと preload が悲惨なことに.

引用:
○ Delegate 実行時の参照
これはいらないかも?5.3 以前のPHPで Call-time pass-by-reference の警告がでてしまいます.

こんなところで一見安定しているような感じなのでしばらく様子見てみます.
投票数:3 平均点:10.00
  条件検索へ

Back to Page Top
MainMenu
Manuals
Search
XOOPS Official & Dev.
XOOPS Communities