Moodle2 : コーディングエラーが検出されました / Notice: Undefined property: stdClass::$defaulthomepage

Moodle2 : コーディングエラーが検出されました / Notice: Undefined property: stdClass::$defaulthomepage

- Tatsuya Shirai の投稿
返信数: 10

 Moodle1からMoodle2にアップグレードした後に,フロントページの上部に下記のエラーメッセージが表示されて左右のコラムの表示がおかしかったり,添付ファイルのようなメッセージが表示されて作業が先に進められない場合があります.

Notice: Undefined property: stdClass::$defaulthomepage in /var/www/html/moodle/index.php on line 39

 これはPHPのエラー報告レベルをNONEに設定していないためです.根本的な原因はMoodleソースコード上のバグが原因ですが…メカニズムとしては,Javascriptをサーバ側で圧縮してクライアントに送信し,それを展開する際にエラーメッセージがゴミとして混入することが原因らしいのですが,詳細は間違っているかも知れません.

 一般的にサービスを提供するWebサーバではバグ等によるセキュリティ脆弱性を突く糸口とされないように,PHPのエラーは表示しない設定になっています.しかしMoodleのアップグレードの作業中などは表面上に現れないバグによってコンテンツの変換などが正しく完了していないかも知れませんのでエラーレベルをNORMALなどに上げている方も多いでしょう.

 以上の問題が発生した場合は【サイト管理】→【開発】→【デバッグ】で”デバッグメッセージ”を”NONE”に変更して下さい.

添付 codingerror.jpg
Tatsuya Shirai への返信

Re: Moodle2 : コーディングエラーが検出されました / Notice: Undefined property: stdClass::$defaulthomepage

- Tatsuya Shirai の投稿

それでもデバッグを続けなくてはならない方はこのままでは困ります.

特に私がいま困っているのはフロントページに表示される,

Notice: Undefined property: stdClass::$defaulthomepage in /var/www/html/moodle/index.php on line 39

これです.待っていれば直るだろうと思っていたのですが,なかなか.moodle/index.phpの冒頭,

    require_once('config.php');
    require_once($CFG->dirroot .'/course/lib.php');
    require_once($CFG->libdir .'/filelib.php');

    redirect_if_major_upgrade_required();

    $urlparams = array();
// (Shirai): ここから追加
    if (empty($CFG->defaulthomepage)) $CFG->defaulthomepage = NULL;
// (Shirai): ここまで追加
    if ($CFG->defaulthomepage == HOMEPAGE_MY && optional_param('redirect', 1, PARAM_BOOL) === 0) {
        $urlparams['redirect'] = 0;
    }


よく理解した訳ではありませんが,上記のように$CFG->defaulthomepageにNULLを設定すればNoticeは出ません.ソースコード中を探したのですが,$CFG->defaulthomepageに値を代入しているところはありません.憶測で申し訳ありませんが,MyMoodleを設定した場合に有効になるのかな?という程度の理解です.なお,【サイト管理】→【アピアランス】→【デフォルトマイホームページ】が怪しい(一度設定すれば後はデータベースから自動的に$CFG->defaulthomepageが設定されるのではないかという読み)のですが,いまだこの設定メニューの意味が理解できていません.ユーザ毎の【ナビゲーション】→【マイホーム】で表示されるものと同じですね…

Tatsuya Shirai への返信

Re: Moodle2 : コーディングエラーが検出されました / Notice: Undefined property: stdClass::$defaulthomepage

- Tatsuya Shirai の投稿

この件についてはMoodleTrackerに報告しました.(MDL-32270)

パッチのトリアージに入ったようだけれども,emptyならば,という条件を追加するのだと追加し忘れが出るのじゃないかな.なぜ設定されなかったのか,という根本と,とりあえず設定されなかったなら適当な初期値を一番上流のところで仮に代入しておく,などが必要なのじゃないだろうか.

Tatsuya Shirai への返信

Re: Moodle2 : コーディングエラーが検出されました / Notice: Undefined property: stdClass::$defaulthomepage

- Tatsuya Shirai の投稿

と言う訳で,なぜ$CFG->defaulthomepageが設定されていないのか,という根本的な原因は,警告メッセージをHTML画面へ出力する設定になっていたために,”新しく追加されたパラメータの設定画面”をパスしてしまったために生じていました.

http://moodle.org/mod/forum/discuss.php?d=200062

Tatsuya Shirai への返信

Re: Moodle2 : コーディングエラーが検出されました / Notice: Undefined property: stdClass::$defaulthomepage

- Tatsuya Shirai の投稿

なお,赤いボックスに”コーディングエラーが~”についてはUsing moodleでもたびたび話題に出ているようで,

http://moodle.org/mod/forum/discuss.php?d=184154

http://moodle.org/mod/forum/discuss.php?d=193767

http://moodle.org/mod/forum/discuss.php?d=163122

そこでは,まずMoodle2.0にアップグレードしなさいとか,IEのキャッシュをクリアとか,moodledata/cache/jsが悪いとか(ちなみに私のサーバにはこのフォルダは生成されていません),色々と言われています.解決しているようには見えません.163122の投稿内容から,Javascriptを圧縮して転送し,クライアント側で展開しているというメカニズムを推測し,そこにNoticeのメッセージがゴミとして含まれた結果,Javascriptが正常に展開できないのではないかと類推した次第です.

Tatsuya Shirai への返信

Re: Moodle2 : コーディングエラーが検出されました / Notice: Undefined property: stdClass::$defaulthomepage

- seiji ueda の投稿

大阪の花園高校の上田と申します。

テストインストールで、自宅win8上の

Virtualboxに作った仮想centOS6.5に

moodle2.6をインストールしています。

インストールはつい1週間ほど前です。

hotpotモジュールを導入した次の日から

上記のエラーがでてログインできなくなりました。

白井先生の書き込みをみて、index.phpにプログラム

を追加しましたが、修復しません。

今後の作業の方向性を(再インストールが早いとか…

)示していただければありがたいです。

 

seiji ueda への返信

Re: Moodle2 : コーディングエラーが検出されました / Notice: Undefined property: stdClass::$defaulthomepage

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators

下記投稿が参考になるかと思います。

[Moodle in English: After setting up HotPot I can't open homepag]
https://moodle.org/mod/forum/discuss.php?d=216455

念のため、hotpotモジュールが正しいディレクトリ (例 /var/www/html/mod/hotpot) に配置されているかどうか、再度ご確認ください。

最大評点: お役立ち度: ★★★★★★☆ (1)
Mitsuhiro Yoshida への返信

Re: Moodle2 : コーディングエラーが検出されました / Notice: Undefined property: stdClass::$defaulthomepage

- seiji ueda の投稿

Mitsuhiro Yoshida 様 

ありがとうございました。

自宅に帰ってからまた見直してみます。

 

seiji ueda への返信

まだ悩んでいます

- seiji ueda の投稿

エラーメッセージはこうなっている。

Coding error detected, it must be fixed by a programmer: Failed to unserialise data from file. Either failed to read, or failed to write.

これはcacheエラーらしい。

このサイトが参考になりそうで、ならない。

http://www.tonisoto.com/?p=486

そもそもログインできないからアドミンパネルにも到達しない。

やはり、moodleは奥が深い。

もう少し調べてみます。

 

seiji ueda への返信

Re: まだ悩んでいます

- seiji ueda の投稿

えーと、何とか自力で解決しました。

方法は簡単です。古いmoodleフォルダをいったん

消去し、新しいmoodleをダウンロードしてコピー。

そのまま、設定画面でインストール。moodledataフォルダは

そのままにして使ったら、データは残ってました。

hotpotatoesのデータは回復してません。

どうやらhotpotから発生したエラーのようですね。