這篇文章介紹的內容是關於PHP 獲取用戶行為[IP/OS/URL/Broswer]參考代碼,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
一個成型的網站,經常需要統計使用者的偏好行為,例如喜歡查看哪個頁面,瀏覽哪類產品等,此時需要記錄使用者的行為,經過數據分析,從而獲得有價值的信息,方便商家的策略定向
下面,是自己測試整理後的部分代碼,可以幫助開發者獲取用戶的IP、操作系統、訪問URL、瀏覽器等主要訊息,可供參考…
/** * 此方法返回用户的IP地址,同时如果拥有代理IP,将会以逗号追加在后面 * 如果只取用当前IP,可参考 : * $ips = explode(',', $bargainModel->get_real_ips()); * $ip = $ips[0]; */public function get_real_ips() { global $ip; if (getenv("HTTP_CLIENT_IP")) { $ip = getenv("HTTP_CLIENT_IP"); } else if (getenv("HTTP_X_FORWARDED_FOR")) { $ip = getenv("HTTP_X_FORWARDED_FOR"); } else if (getenv("REMOTE_ADDR")) { $ip = getenv("REMOTE_ADDR"); } else { $ip = "NULL"; } return $ip; }
#也可以參考這個取得方法: PHP取得目前使用者真實IP的方法
#對於IP的存儲,建議參考文章:# ip2long 和long2ip
/** * PHP 获取当前页面 URL * @return string */function currPageURL(){ $pageURL = 'http'; if (!empty($_SERVER['HTTPS'])) { $pageURL .= "s"; } $pageURL .= "://"; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"]; } else { $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]; } return $pageURL; }
取得的結果類似:
https://sinia.com/cart/show/id/292.html?ord_id=43
/** * 获取客户端操作系统信息包括 win10 * @param null * @author Jea杨 * @return string */ function getOS() { $agent = $_SERVER['HTTP_USER_AGENT']; $os = false; if (preg_match('/win/i', $agent) && strpos($agent, '95')) { $os = 'Windows 95'; } else if (preg_match('/win 9x/i', $agent) && strpos($agent, '4.90')) { $os = 'Windows ME'; } else if (preg_match('/win/i', $agent) && preg_match('/98/i', $agent)) { $os = 'Windows 98'; } else if (preg_match('/win/i', $agent) && preg_match('/nt 6.0/i', $agent)) { $os = 'Windows Vista'; } else if (preg_match('/win/i', $agent) && preg_match('/nt 6.1/i', $agent)) { $os = 'Windows 7'; } else if (preg_match('/win/i', $agent) && preg_match('/nt 6.2/i', $agent)) { $os = 'Windows 8'; } else if (preg_match('/win/i', $agent) && preg_match('/nt 10.0/i', $agent)) { $os = 'Windows 10';#添加win10判断 } else if (preg_match('/win/i', $agent) && preg_match('/nt 5.1/i', $agent)) { $os = 'Windows XP'; } else if (preg_match('/win/i', $agent) && preg_match('/nt 5/i', $agent)) { $os = 'Windows 2000'; } else if (preg_match('/win/i', $agent) && preg_match('/nt/i', $agent)) { $os = 'Windows NT'; } else if (preg_match('/win/i', $agent) && preg_match('/32/i', $agent)) { $os = 'Windows 32'; } else if (preg_match('/linux/i', $agent)) { $os = 'Linux'; } else if (preg_match('/unix/i', $agent)) { $os = 'Unix'; } else if (preg_match('/sun/i', $agent) && preg_match('/os/i', $agent)) { $os = 'SunOS'; } else if (preg_match('/ibm/i', $agent) && preg_match('/os/i', $agent)) { $os = 'IBM OS/2'; } else if (preg_match('/Mac/i', $agent) && preg_match('/PC/i', $agent)) { $os = 'Macintosh'; } else if (preg_match('/PowerPC/i', $agent)) { $os = 'PowerPC'; } else if (preg_match('/AIX/i', $agent)) { $os = 'AIX'; } else if (preg_match('/HPUX/i', $agent)) { $os = 'HPUX'; } else if (preg_match('/NetBSD/i', $agent)) { $os = 'NetBSD'; } else if (preg_match('/BSD/i', $agent)) { $os = 'BSD'; } else if (preg_match('/OSF1/i', $agent)) { $os = 'OSF1'; } else if (preg_match('/IRIX/i', $agent)) { $os = 'IRIX'; } else if (preg_match('/FreeBSD/i', $agent)) { $os = 'FreeBSD'; } else if (preg_match('/teleport/i', $agent)) { $os = 'teleport'; } else if (preg_match('/flashget/i', $agent)) { $os = 'flashget'; } else if (preg_match('/webzip/i', $agent)) { $os = 'webzip'; } else if (preg_match('/offline/i', $agent)) { $os = 'offline'; } else { $os = 'Unknown'; } return $os; }
#當然,也可以使用內建的參數來取得
eaf0f186263cc203ecf2e3ef4a1c8846
#可以參考文章: PHP 取得伺服器作業系統等資訊
/** * 获取客户端浏览器信息 * @param null * @author Jea杨 * @return string */public function getBroswer() { $user_OSagent = $_SERVER['HTTP_USER_AGENT']; if (strpos($user_OSagent, "Maxthon") && strpos($user_OSagent, "MSIE")) { $visitor_browser = "Maxthon(Microsoft IE)"; } elseif (strpos($user_OSagent, "Maxthon 2.0")) { $visitor_browser = "Maxthon 2.0"; } elseif (strpos($user_OSagent, "Maxthon")) { $visitor_browser = "Maxthon"; } elseif (strpos($user_OSagent, "Edge")) { $visitor_browser = "Edge"; } elseif (strpos($user_OSagent, "Trident")) { $visitor_browser = "IE"; } elseif (strpos($user_OSagent, "MSIE")) { $visitor_browser = "IE"; } elseif (strpos($user_OSagent, "MSIE")) { $visitor_browser = "MSIE"; } elseif (strpos($user_OSagent, "NetCaptor")) { $visitor_browser = "NetCaptor"; } elseif (strpos($user_OSagent, "Netscape")) { $visitor_browser = "Netscape"; } elseif (strpos($user_OSagent, "Chrome")) { $visitor_browser = "Chrome"; } elseif (strpos($user_OSagent, "Lynx")) { $visitor_browser = "Lynx"; } elseif (strpos($user_OSagent, "Opera")) { $visitor_browser = "Opera"; } elseif (strpos($user_OSagent, "MicroMessenger")) { $visitor_browser = "WeiXinBrowser"; } elseif (strpos($user_OSagent, "Konqueror")) { $visitor_browser = "Konqueror"; } elseif (strpos($user_OSagent, "Mozilla/5.0")) { $visitor_browser = "Mozilla"; } elseif (strpos($user_OSagent, "Firefox")) { $visitor_browser = "Firefox"; } elseif (strpos($user_OSagent, "U")) { $visitor_browser = "Firefox"; } else { $visitor_browser = "Other Browser"; } return $visitor_browser; }
考慮實際開發,一般會設計各個頁面繼承某個公共類,然後在公共類別的初始方法或建構函式中執行類似下面的邏輯處理,取得使用者行為並記錄到資料庫,之後再進行資料讀取後的展示設計…
/** * 仅供参考而已 */ $ips = explode(',', $this->get_real_ips()); $ip = $ips[0]; $browser = $this->getBroswer(); $os = $this->getOS(); $addData = [ 'uid' => $user_id, 'curr_url' => $this->currPageURL(), 'user_ip' => $ip, 'os' => $os, 'browser' => $browser, 'add_time' => time(), ]; M('user_behavior') ->add($addData);
#資料庫中的記錄參考:
以上是PHP 取得使用者行為[IP/OS/URL/Broswer]參考程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!