../iploopup/lib.php,會造成訪客自動登入後,執行這行無法繼續,故網頁空白,重新整理時已不再更新登入紀錄,所以網頁恢復正常。moodle 可以設定不記錄訪客訪問來避免此問題,但目前系統設定維持訪客訪問記錄,故排除訪客登入 ip 的國別記錄。當用戶首次登入時,由於系統中並沒有上次登入的 ip 訊息,查詢 ip 位置函式 iplookup_find_location,因找不到對應位置而出現以下錯誤訊息,也要一併處理,也就是當上次登入 ip 是 null,就直接設定國別代碼為 'TW'。
異常-Invalid IP address: ”
[root@dywang html]# diff -urN -wbBE moodle/lib/moodlelib.php moodle23/lib/moodlelib.php
--- moodle/lib/moodlelib.php 2012-08-10 08:05:01.000000000 +0800
+++ moodle23/lib/moodlelib.php 2014-11-04 10:01:15.231909874 +0800
@@ -3287,6 +3287,15 @@
$USER->lastlogin = $user->lastlogin = $USER->currentlogin;
$USER->currentlogin = $user->lastaccess = $user->currentlogin = time();
+ if ( $USER->id != 1 ) {
+ require_once('../iplookup/lib.php'); //dywang
+ if(is_null($USER->lastip)) {
+ $user->country = 'TW';
+ } else {
+ $info = iplookup_find_location($USER->lastip);
+ $user->country = $info['countrycode'];
+ }
+ }
$user->id = $USER->id;
$DB->update_record('user', $user);
HTTP_CLIENT_IP, HTTP_X_FORWARDED_FOR, REMOTE_ADDR 順序找尋存在的 IP 記錄,共有以下四種設定選擇,若要直接記錄 proxy ip 可設定只搜尋 REMOTE ADDR。
HTTP_CLIENT_IP, HTTP_X_FORWARDED_FOR, REMOTE_ADDR
HTTP_X_FORWARDED_FOR, REMOTE_ADDR
HTTP_CLIENT, REMOTE_ADDR
REMOTE_ADDR