欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在WordPress中使用PHP腳本來判斷訪客來自什么國家

 更新時間:2015年12月10日 15:24:56   作者:吳釗  
這篇文章主要介紹了在WordPress中使用PHP腳本來判斷訪客來自什么國家的方法,同時也可以調用文中所介紹的國內網站所提供的API來查詢,需要的朋友可以參考下

區(qū)分訪客國家有什么用?

這里是幾個我利用該功能的例子.

1.區(qū)分網站功能
這個博客有翻譯文章的功能, 這是為了方便海外訪客閱讀文章, 但對中國人顯得十分多余. 所以我通過 IP 判斷國家, 對中國大陸地區(qū)屏蔽翻譯功能.

2.區(qū)分展示廣告
比如中國大陸地區(qū)在側邊欄最下方看到的是拿福能的廣告, 而其他地區(qū)看到的是 Google 的廣告. hostucan 是我的一個廣告主, 有英文網站, 也有中文網站, 所以我可以向他提供區(qū)分展示服務, 免得浪費流量.

3.屏蔽布點服務
海外有很多好的服務平臺, 在網站上布點即可采集數據和分享文章. 但很不幸, 因為某些原因, 他們在國內展示效果并不好, 不但沒有起到應有效果, 還讓頁面加載時間變長. 可以對大陸訪客屏蔽這些布點.

在 PHP 通過 IP 區(qū)分國家

如何用 PHP 通過 IP 區(qū)分國家和地區(qū)呢? Maxmind.com 提供一套 GeoIP 的解決方案, 只需要簡單幾步即可在 PHP 中通過 IP 判斷訪客的國家.

1. 下載數據庫和 PHP 庫文件

下載 GeoID.dat.gz, 解壓為 GeoIP.dat 文件.
下載 geoip.inc.
2. 通過 PHP 代碼獲取國家信息
以下是一段示范代碼, 演示如何獲取國家代號和國家名稱.

<?php
 
// 引入 PHP 庫文件
include("geoip.inc");
 
// 打開本地數據庫, 數據保存在 GeoIP 文件中.
$geoData = geoip_open('GeoIP.dat', GEOIP_STANDARD);
 
// 獲取國家 IP
$countryCode = geoip_country_code_by_addr($geoData, $_SERVER['REMOTE_ADDR']);
 
// 獲取國家名稱
$countryName = geoip_country_name_by_addr($geoData, $_SERVER['REMOTE_ADDR']);
 
// 關閉本地數據庫
geoip_close($geoData);
 
?>

在 WordPress 中通過 IP 區(qū)分國家

既然 PHP 上使用沒問題, WordPress 肯定也是 Okay 的. 看看我是怎么使用的.

1. 放置數據庫文件
將 GeoIP.dat 解壓到 WordPress 根目錄中. (你可以在這個目錄找到 wp-config.php 或者 wp-config-sample.php 文件)

2. 編寫調用接口
在主題目錄中新建文件夾 include, 將 geoip.inc 放置在新建文件夾中. 并在該文件夾新建文件 geoip.php 文件內容如下.

<?php
 
include('geoip.inc');
 
global $countryCode;
 
$geoData = geoip_open('GeoIP.dat', GEOIP_STANDARD);
$countryCode = geoip_country_code_by_addr($geoData, $_SERVER['REMOTE_ADDR']);
geoip_close($geoData);
 
?>

這里只取國家代號作為判別依據. 并且國家代號是全局變量, 以避免頁面多處判斷需要反復訪問 GeoIP.dat 獲取信息, 減少程序開銷.

2. 調用接口, 獲取國家代號
3. 打開 header.php 文件, 在文件頂部加入代碼如下.

<?php include('include/geoip.php'); ?>

4. 使用國家代號
在主題中調用代碼, 例子如下.

<?php
 
global $countryCode;
 
if($countryCode == 'CN') {
 // 中國大陸地區(qū)執(zhí)行的代碼
} else if($countryCode == 'US') {
 // 美國地區(qū)執(zhí)行的代碼
} else {
 // 中國大陸和美國以外地區(qū)執(zhí)行的代碼
}
 
?>


可能有人會問, 加這么個東西, 性能如何? 會不會要求強大的服務器? 我測試過, 正常的服務器上幾乎不影響頁面加載性能, 可以看看這個博客的速度. 如果不放心, 自己測一下.

PS:采用IP查詢API接口
國內不少互聯(lián)網公司例如騰訊、新浪以及淘寶都有IP查詢接口,直接調用查詢即可。

(1)騰訊IP分享計劃

復制代碼 代碼如下:

/**根據騰訊IP分享計劃的地址獲取IP所在地,比較精確*/function getIPLoc_QQ($ip1){$url = 'http://ip.qq.com/cgi-bin/searchip?searchip1='.$ip1;$ch = curl_init($url);curl_setopt($ch,CURLOPT_ENCODING ,'gb2312');curl_setopt($ch, CURLOPT_TIMEOUT, 10);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 獲取數據返回$result = curl_exec($ch);$result = mb_convert_encoding($result, "utf-8", "gb2312"); // 編碼轉換,否則亂碼curl_close($ch);preg_match("@<span>(.*)</span></p>@iU",$result,$ipArray);$loc = $ipArray[1];return $loc;}

(2)新浪IP查詢接口

復制代碼 代碼如下:

/**根據新浪IP查詢接口獲取IP所在地*/function getIPLoc_sina($ip1){$url = 'http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip='.$ip1;$ch = curl_init($url);//curl_setopt($ch,CURLOPT_ENCODING ,'utf8');curl_setopt($ch, CURLOPT_TIMEOUT, 10);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 獲取數據返回$location = curl_exec($ch);$location = json_decode($location);curl_close($ch); $loc = "";if($location===FALSE) return "";if (emptyempty($location->desc)) {$loc = $location->province.$location->city.$location->district.$location->isp;}else{$loc = $location->desc;}return $loc;}

(3)使用淘寶IP接口

復制代碼 代碼如下:

/** * 根據淘寶IP查詢接口獲取IP所在地 */function getCity($ip){$url="http://ip.taobao.com/service/getIpInfo.php?ip=".$ip;$ip=json_decode(file_get_contents($url));if((string)$ip->code=='1'){ return false; } $data = (array)$ip->data;return $data;}


總結

通過 IP 判斷訪客來源十分精準的, 現在一些外貿網站都是通過這個方法向用戶進行展示區(qū)分, 比如美國地區(qū)的用戶默認看到美國能買到的商品和美國物流信息. 但不是百分之百的準確, 比如某人常年翻墻, 那他可能一直看不到本國的信息. 至于是否需要區(qū)分處理, 網站主要有所考慮.

相關文章

  • PHP調用JAVA的WebService簡單實例

    PHP調用JAVA的WebService簡單實例

    本篇文章主要是對PHP調用JAVA的WebService簡單實例進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-03-03
  • PHP Beanstalkd消息隊列的安裝與使用方法實例詳解

    PHP Beanstalkd消息隊列的安裝與使用方法實例詳解

    這篇文章主要介紹了PHP Beanstalkd消息隊列的安裝與使用方法,結合實例形式詳細分析了PHP Beanstalkd消息隊列的基本功能、原理、安裝、使用方法及相關操作注意事項,需要的朋友可以參考下
    2020-02-02
  • PHP封裝的簡單連接MongoDB類示例

    PHP封裝的簡單連接MongoDB類示例

    這篇文章主要介紹了PHP封裝的簡單連接MongoDB類,涉及php針對MongoDB數據庫的簡單連接、數據插入、查詢等相關操作技巧,需要的朋友可以參考下
    2019-02-02
  • php中轉義mysql語句的實現代碼

    php中轉義mysql語句的實現代碼

    如果你需要向數據庫,插入形如’你好’,這樣包含有單引號或者雙引號的字符串怎么辦,當然可以使用反斜杠進行轉義,但是如果內容太多呢?
    2011-06-06
  • php設計模式 Facade(外觀模式)

    php設計模式 Facade(外觀模式)

    為子系統(tǒng)中的一組接口提供一個一致的界面,定義一個高層接口,使得這一子系統(tǒng)更加的容易使用
    2011-06-06
  • php部分常見問題總結

    php部分常見問題總結

    php常見問題解決集錦,主要包括php的運行方法等小技巧
    2008-03-03
  • PHP設計模式之裝飾器模式定義與用法詳解

    PHP設計模式之裝飾器模式定義與用法詳解

    這篇文章主要介紹了PHP設計模式之裝飾器模式,結合實例形式詳細分析了php裝飾器模式的概念、原理、定義、使用方法及相關操作注意事項,需要的朋友可以參考下
    2018-04-04
  • PHP MYSQL亂碼問題,使用SET NAMES utf8校正

    PHP MYSQL亂碼問題,使用SET NAMES utf8校正

    PHP操作數據庫的時候,數據庫中數據使用UTF8編碼,在讀出來的時候,顯示的全是???????問號亂碼,找了一些資料原來是在讀取之前進行一次編碼設置
    2009-11-11
  • php 正則表達式小結

    php 正則表達式小結

    正則表達式(regular expression)描述了一種字符串匹配的模式,可以用來檢查一個串是否含有某種子串、將匹配的子串做替換或者從某個串中取出符合某個條件的子串等。
    2009-08-08
  • PHP 如何獲取二維數組中某個key的集合

    PHP 如何獲取二維數組中某個key的集合

    PHP 獲取二維數組中某個key的集合
    2014-06-06

最新評論