phperror.logに大量の,
[10-12-2008 22:20:01] PHP Notice: Undefined index: REMOTE_ADDR in C:\****\*****\moodle\lib\moodlelib.php on line 7723
という記録が残っています.どうやら$_SERVER['REMOTE_ADDR']が存在しないということのようです.
これは可能な限り正確なIPアドレスを取得する関数,function getremoteaddr()の中に存在する,
return cleanremoteaddr($_SERVER['REMOTE_ADDR']);
です.では,なぜREMOTE_ADDRが存在しないのかと言うと,サーバ上でadmin/cron.phpをダイレクトにPHPで実行しているためです.Apacheを介さないので当然ですね.このログは5分毎に記録されている訳ではないので,ある程度の時間間隔(たしかランダム)に実行される処理の中で呼ばれているのだと予想されます.(add_to_log()でも使われる)
実際,mdl_logのテーブルを見てみると,いくつかIPアドレスの欄が空欄のデータがあります.それを[レポート]-[ログ]で見てみると,IPアドレスの欄が「ここをクリック...」となっていて,クリックするとIPlookupのウィンドウが開いて「無効なIPアドレスフォーマットです.」とエラー表示されます.http://www.suzuka-ct.ac.jp/mech/moodle/iplookup/index.php?ip=&user=104 このように?iP=の後が空欄なのですから当然です.
このように,function getremoteaddr()が正しかろうが間違っていようがIPアドレスを返してくれないことを考慮されていないのはどうでしょうね.Noticeが発生しないようにするならば.
return cleanremoteaddr($_SERVER['REMOTE_ADDR']);
の直前に,
if (!isset($_SERVER['REMOTE_ADDR'])) return false;
を追加すれば良いのですが,でも,果たしてそれで解決になるのでしょうか.
あるいはREMOTE_ADDRが存在しない場合はfalseではなく,サーバのIPアドレスを返すという手もあるかも知れません.ただ,REMOTE_ADDRがセットされなかった原因がPHPを直に実行した場合以外にもあるならば切り分けが必要かも知れません.