Nucleus(JP)フォーラム

NucleusCMS日本語版ユーザーのためのサポートフォーラムです。疑問が生じたらまずは記事検索をご利用ください。

ログインしていません。

#1 2012-08-21 15:12:29

mekyo
メンバー
登録日: 2005-11-22
投稿: 80

Re: PHP5.4.xで nucleus3.64を使うための修正(まとめ)

原因1
(例) 宣言で function abc(&$data) { $data +=1; };
があるとします。
呼び出しでは、 abc($data)の形式でないといけないのに
abc(&$data)と間違った関数の呼び出しをしているためです。
※間違って関数宣言部の&を消さないように注意してください。

【3.64のコアの修正】
nucleus/libs/MANAGER.php
※下記の - 行の
  関数名をcall_user_func_arrayに変更し、
  &$data を array(&$data)  に変更します

Index: nucleus/libs/MANAGER.php
===================================================================
--- nucleus/libs/MANAGER.php	(リビジョン 1212)
+++ nucleus/libs/MANAGER.php	(作業コピー)
@@ -426,7 +426,7 @@
                 $this->_loadPlugin($listener);
                 // do notify (if method exists)
                 if (isset($this->plugins[$listener]) && method_exists($this->plugins[$listener], 'event_' . $eventName))
-                    call_user_func(array(&$this->plugins[$listener],'event_' . $eventName), &$data);
+                    call_user_func_array(array(&$this->plugins[$listener],'event_' . $eventName), array(&$data) );
             }
         }
 

原因2
nucleus/libs/ACTION.php
※下記の - 行の &$data を $data に変更します

--- NucleusCMS_3.64_Release/nucleus/libs/ACTION.php	2011-03-30 09:50:02.000000000 +0900
+++ NucleusCMS_3.64_Release/nucleus/libs/ACTION.php	2012-08-21 06:52:08.750000000 +0900
@@ -254,7 +254,7 @@
 		// evaluate content from FormExtra
 		$result = 1;
 		$data = array('type' => 'membermail', 'error' => &$result);
-		$manager->notify('ValidateForm', &$data);
+		$manager->notify('ValidateForm', $data);
 
 		if ( $result != 1 )
 		{

原因3
「=& new」 を 「= new」 に変更します。

原因4
プラグインが上記の原因2,3と同じような問題を持っている場合
NP_MultipleCategories 0.5.1j
NP_ExtraSkinJP 0.4.7

関連スレッド
・質問:PHP5.4.4でnucleus3.64が表示されない(http500)
  http://japan.nucleuscms.org/bb/viewtopic.php?t=5904

その他の回避策:
共有サーバーなどで、デフォルトのphpが5.4の場合でも
nucleusのフォルダだけphp5.3で動くようにサーバーの設定を変更することで、この問題を回避できます。

オフライン

#2 2012-08-22 22:47:38

mekyo
メンバー
登録日: 2005-11-22
投稿: 80

Re: PHP5.4.xで nucleus3.64を使うための修正(まとめ)

:!: まとめが 読みにくくなるため、記事を下記に移動しました

call_user_func_arrayの挙動
http://japan.nucleuscms.org/bb/viewtopic.php?t=6141

オフライン

#3 2012-08-22 23:09:14

Mocchi
メンバー
登録日: 2006-11-19
投稿: 438

Re: PHP5.4.xで nucleus3.64を使うための修正(まとめ)

この対応はどちらかというとハックに近いです。reference渡しの件をPHPの文法に従って正しく対応すると、Nucleus CMSに含まれるほぼすべてのライブラリファイルを修正する必要があります。以下の投稿を参照して下さい。

[nuc-jp-dev 1123] Re: 3.7リリース or 4.0テストの検討

もし可能でしたら、開発者用メーリングリストに加わっていただければと思います。メンバー間で議論を重ねて話を進めることで新リリースを実現するのがよいのかなと思います。

オフライン

#4 2012-08-23 01:46:18

mekyo
メンバー
登録日: 2005-11-22
投稿: 80

Re: PHP5.4.xで nucleus3.64を使うための修正(まとめ)

削除しました。

オフライン

#5 2012-08-23 02:05:21

mekyo
メンバー
登録日: 2005-11-22
投稿: 80

Re: PHP5.4.xで nucleus3.64を使うための修正(まとめ)

トピックの本題と関係のないの内容なので削除しました。

オフライン

#6 2012-08-23 11:08:24

Mocchi
メンバー
登録日: 2006-11-19
投稿: 438

Re: PHP5.4.xで nucleus3.64を使うための修正(まとめ)

mekyo さんの発言:

参照カウンタプラス攻撃で問題ないと思います。

この文脈でこの発言が出てくる意図がよくわからないのですが(特に「で」の使われ方が)?

メーリングリストへの参加の件は了承しました。それぞれ人の事情に合わせて活動するのがいいと思います。

オフライン

Board footer