Nucleus(JP)フォーラム Forum Index

Find on the forum:
OR  AND    » Advanced Search

未返信の記事を表示全てのフォーラムを既読にする

新しいトピックを投稿 トピックに返信
投稿者 メッセージ
nazka



登録日: 2009.07.25
記事: 1

記事 日時: 2009.07.25 (土) 04:17   記事の件名: [事前解決済] MANAGER.php の expected to be a reference に、ついて。
引用付きで返信

[環境]
Fedora + Apache2 + PHP5.3.0 + nucleusCMS3.3
php5.2.8から更新したところNP_SkinFilesを含めた各種プラグインがWARNINGを吐くようになりました。
アレコレ操作していましたが上手くいかないので資産を捨てて、nucleusCMS3.4.1を入れ直しました。

Fedora + Apache2 + PHP5.3.0 + nucleusCMS3.41
DBもディレクトリも綺麗な状態で3.41をインストールしたのですが管理画面で

Warning: Parameter 1 to NP_SkinFiles::event_AdminPrePageHead() expected to be a reference, value given in /home/user/blog/public_html/nucleus/libs/MANAGER.php on line 414
Warning: Parameter 1 to NP_SkinFiles::event_QuickMenu() expected to be a reference, value given in /home/user/blog/public_html/nucleus/libs/MANAGER.php on line 414

が表示されます。 該当するコード部は、
call_user_func(array(&$this->plugins[$listener],'event_' . $eventName), $data);
なのですが。 
call_user_func(array(&$this->plugins[$listener],'event_' . $eventName), &$data);
とする必要があるようです。

以下のコードで挙動を簡単に確認取りましたが
<?php
class hoge
{
function chg( &$data ){ $data=$data+10; }
}
$c = new hoge();
$i = 10;
$c->chg($i);
echo "CHK1: $i \n";
call_user_func( array($c,"chg"), $i );
echo "CHK2: $i \n";
call_user_func( array($c,"chg"), &$i );
echo "CHK3: $i \n";

[php5.2.8]
CHK1: 20
CHK2: 20
CHK3: 30

[php5.3.0]
CHK1: 20
Warning: Parameter 1 to hoge::chg() expected to be a reference, value given in /home/user/blog/public_html/nucleus/libs/test.php on line 10
CHK2: 20
CHK3: 30

という結果でした。 5.2.9, 5.2.10 を私が入れてなかったので確認してませんでしたが
expected to be a reference や MANAGER で それらしい話題が見つからなかったので報告します。

# 追伸: php5.2.8でも warning出ないだけだけで参照アクセスできないけど。 問題なかったのだろうか……。

_________________
Chiether, Aklzki with Nazka.

トップに戻る

ユーザーのプロフィールを表示 プライベートメッセージを送信
shizuki
モデレーター
モデレーター


登録日: 2006.03.23
記事: 891
所在地: 西播磨

記事 日時: 2009.07.25 (土) 17:39   記事の件名:
引用付きで返信

この問題、つい先日も本家の方で別のプラグインで出てました。
Code:
function event_QuickMenu(&data)
Code:
function event_QuickMenu(data)
にすればいい話なんですが、本家のフォーラム見てもらえれば判るんですが、全く別の方法で解決ということにしたようです。リポジトリのコードも書き換わってました。
そもそもなぜ此処で参照渡しなのかがわからない。
Quote:
php5.2.8でも warning出ないだけだけで参照アクセスできないけど。
E_STRICTでエラーレポート出すと、かなりすごいことになってます。
PHP5.3でE_DEPRECATEDにするとさらに愉快になれます。
これ何とかしたいんだけどなぁ……

トップに戻る

ユーザーのプロフィールを表示 プライベートメッセージを送信 投稿者のウェブサイトに移動 MSNM
shizuki
モデレーター
モデレーター


登録日: 2006.03.23
記事: 891
所在地: 西播磨

記事 日時: 2009.07.28 (火) 02:24   記事の件名:
引用付きで返信

えーと。
中途半端なまま放置したような形になっててごめんなさい。
上で書いた
Quote:
全く別の方法で解決ということにしたようです
は、http://forum.nucleuscms.org/viewtopic.php?p=91526#91526に書いてあります。
ここまで読んで
「「非表示にしたら解決」って、それってどうよ?」
って思ったのをそのまま書いてしまいました。
その後、nazkaさんの書かれた方法
Code:
call_user_func(array(&$this->plugins[$listener],'event_' . $eventName), &$data);
になったようです。
ただし、デフォルト状態だと
Code:
ini_set('display_errors','0');
が生きたままになってます。
さすがに、元のコードのままじゃなくて、
Code:
$CONF['debug'] = 0;
if ($CONF['debug']) {
   error_reporting(E_ALL);   // report all errors!
} else {
   ini_set('display_errors','0');
   error_reporting(E_ERROR);
}
にはなってます。

トップに戻る

ユーザーのプロフィールを表示 プライベートメッセージを送信 投稿者のウェブサイトに移動 MSNM
Mocchi



登録日: 2006.11.19
記事: 143

記事 日時: 2010.07.04 (日) 01:18   記事の件名: 再現しました
引用付きで返信

ほぼ1年前の投稿ですが、うちの環境でも再現しました。

Ubuntu Server Ediition 10.05 + PHP 5.3.2 + MySQL 5.1.41 + Nucleus CMS 3.31SP3

きっかけは、プラグインがAdminPrePageHeadとBookmarkletExtraHeadでコードを出力しなかったことでした。参照した変数に追記する形で利用しているので、変数の参照が返されていないのが原因。

以下のようにして対応しました。
Code:
call_user_func(array(&$this->plugins[$listener],'event_' . $eventName), &$data);


Nucleus 3.41では修正されてますね。まだ3.31系を使っている方は要注意です。

トップに戻る

ユーザーのプロフィールを表示 プライベートメッセージを送信
新しいトピックを投稿 トピックに返信
特定期間内の記事を表示:   

Page 1 of 1

All times are GMT + 9 Hours

移動先:  

新規投稿: 不可
返信投稿: 不可
記事編集: 不可
記事削除: 不可
投票参加: 不可
ファイル添付不可
ダウンロード:

Powered by phpBB © 2001, 2002 phpBB Group