PHP 記錄訪客的瀏覽信息方法
可以記錄訪客的地理位置,操作系統(tǒng),瀏覽器,IP,時(shí)間和訪問(wèn)的文件。
1.首先創(chuàng)建一個(gè)comm_function.php文件:
<?php
//echo $_SERVER['HTTP_USER_AGENT'];
//echo "<br />".$_SERVER ['REMOTE_ADDR'];
/**
* 獲取客戶端類(lèi)型,手機(jī)還是電腦,以及相應(yīng)的操作系統(tǒng)類(lèi)型。
*
* @param string $subject
*/
function get_os($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 )) {
if(preg_match("/Mobile/", $agent)){
if(preg_match("/QQ/i", $agent)){
$os = "Android QQ Browser";
}else{
$os = "Android Browser";
}
}else{
$os = 'PC-Linux';
}
} else if (preg_match ( '/Mac/i', $agent )) {
if(preg_match("/Mobile/", $agent)){
if(preg_match("/QQ/i", $agent)){
$os = "IPhone QQ Browser";
}else{
$os = "IPhone Browser";
}
}else{
$os = 'Mac OS X';
}
} 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 = '未知操作系統(tǒng)';
}
return $os;
}
/**
* 獲取 客戶端的瀏覽器類(lèi)型
* @return string
*/
function get_broswer($sys){
if (stripos($sys, "Firefox/") > 0) {
preg_match("/Firefox\/([^;)]+)+/i", $sys, $b);
$exp[0] = "Firefox";
$exp[1] = $b[1]; //獲取火狐瀏覽器的版本號(hào)
} elseif (stripos($sys, "Maxthon") > 0) {
preg_match("/Maxthon\/([\d\.]+)/", $sys, $aoyou);
$exp[0] = "傲游";
$exp[1] = $aoyou[1];
} elseif (stripos($sys, "MSIE") > 0) {
preg_match("/MSIE\s+([^;)]+)+/i", $sys, $ie);
$exp[0] = "IE";
$exp[1] = $ie[1]; //獲取IE的版本號(hào)
} elseif (stripos($sys, "OPR") > 0) {
preg_match("/OPR\/([\d\.]+)/", $sys, $opera);
$exp[0] = "Opera";
$exp[1] = $opera[1];
} elseif(stripos($sys, "Edge") > 0) {
//win10 Edge瀏覽器 添加了chrome內(nèi)核標(biāo)記 在判斷Chrome之前匹配
preg_match("/Edge\/([\d\.]+)/", $sys, $Edge);
$exp[0] = "Edge";
$exp[1] = $Edge[1];
} elseif (stripos($sys, "Chrome") > 0) {
preg_match("/Chrome\/([\d\.]+)/", $sys, $google);
$exp[0] = "Chrome";
$exp[1] = $google[1]; //獲取google chrome的版本號(hào)
} elseif(stripos($sys,'rv:')>0 && stripos($sys,'Gecko')>0){
preg_match("/rv:([\d\.]+)/", $sys, $IE);
$exp[0] = "IE";
$exp[1] = $IE[1];
}else {
$exp[0] = "未知瀏覽器";
$exp[1] = "";
}
return $exp[0].'('.$exp[1].')';
}
/**
* 根據(jù) 客戶端IP 獲取到其具體的位置信息
* @param unknown $ip
* @return string
*/
function get_address_by_ip($ip) {
$url = "http://ip.taobao.com/service/getIpInfo.php?ip=".$ip;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$info = curl_exec($curl);
curl_close($curl);
return $info;
}
function clientlog() {
$useragent = $_SERVER ['HTTP_USER_AGENT'];
$clientip = $_SERVER ['REMOTE_ADDR'];
$client_info = get_os ( $useragent ) . "---" . get_broswer ( $useragent );
$rawdata_position = get_address_by_ip ( $clientip );
$rawdata_position = json_decode($rawdata_position, true);
$country = $rawdata_position['data']['country'];
$province = $rawdata_position['data']['region'];
$city = $rawdata_position['data']['city'];
$nettype = $rawdata_position['data']['isp'];
$time = date ( 'y-m-d h:m:s' );
$data = "來(lái)自{$country} {$province} {$city }{$nettype} 的客戶端: {$client_info},IP為:{$clientip},在{$time}時(shí)刻訪問(wèn)了{(lán)$_SERVER['PHP_SELF']}文件!\r\n";
$filename = "./log.log";
if (! file_exists ( $filename )) {
fopen ( $filename, "w+" );
}
file_put_contents ( $filename, $data, FILE_APPEND );
}
2.在別的文件引入這個(gè)comm_function.php
require_once "comm_function.php";
以上這篇PHP 記錄訪客的瀏覽信息方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
linux mint下安裝phpstorm2020包括JDK部分的教程詳解
這篇文章主要介紹了linux mint下安裝phpstorm2020包括JDK部分的教程詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
Laravel框架實(shí)現(xiàn)調(diào)用百度翻譯API功能示例
這篇文章主要介紹了Laravel框架實(shí)現(xiàn)調(diào)用百度翻譯API功能,結(jié)合實(shí)例形式分析了基于Laravel框架的百度翻譯API調(diào)用相關(guān)操作技巧,需要的朋友可以參考下2019-05-05
PHP YII框架開(kāi)發(fā)小技巧之模型(models)中rules自定義驗(yàn)證規(guī)則
yii的models中rules部分是一些表單的驗(yàn)證規(guī)則,對(duì)于表單驗(yàn)證有幫助,在相應(yīng)的視圖(views)里面添加了表單,在表單被提交之前程序都會(huì)自動(dòng)先來(lái)這里面的規(guī)則里驗(yàn)證,只有通過(guò)對(duì)其有效的限制規(guī)則后才能被提交,可以很有效地保證表單安全和信息的有效性2015-11-11
php 陰歷-農(nóng)歷-轉(zhuǎn)換類(lèi)代碼
網(wǎng)上GOOGLE到的,非常不錯(cuò) 來(lái)源不祥 非本人所寫(xiě),需要的朋友可以參考下。2012-01-01
基于thinkPHP實(shí)現(xiàn)的微信自定義分享功能示例
這篇文章主要介紹了基于thinkPHP實(shí)現(xiàn)的微信自定義分享功能,結(jié)合實(shí)例形式分析了thinkPHP調(diào)用微信接口實(shí)現(xiàn)自定義分享功能的相關(guān)操作技巧,需要的朋友可以參考下2016-09-09
php小型企業(yè)庫(kù)存管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)代碼
雙專(zhuān)業(yè)畢業(yè)論文做了一個(gè)小型企業(yè)庫(kù)存管理系統(tǒng),使用PHP&mysql組合進(jìn)行開(kāi)發(fā)。頭一次開(kāi)發(fā)稍微大一點(diǎn)的東西,php也是自學(xué)的2011-05-05
php微信公眾號(hào)開(kāi)發(fā)之二級(jí)菜單
這篇文章主要為大家詳細(xì)介紹了php微信公眾號(hào)開(kāi)發(fā)之二級(jí)菜單,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10
Thinkphp5.1獲取項(xiàng)目根目錄以及子目錄路徑的方法實(shí)例講解
這篇文章主要介紹了Thinkphp5.1獲取項(xiàng)目根目錄以及子目錄路徑的方法實(shí)例講解,希望正在學(xué)習(xí)TP框架的同學(xué)可以跟著小編一起來(lái)學(xué)習(xí)研究下2021-03-03
PHP分多步驟填寫(xiě)發(fā)布信息的簡(jiǎn)單方法實(shí)例代碼
有的時(shí)候,在做發(fā)布信息提交頁(yè)面時(shí),需要把很多復(fù)雜信息提交頁(yè)面分成多個(gè)步驟來(lái)提交。下現(xiàn)就是實(shí)現(xiàn)的這種功能的基本方法2012-09-09

