Archive

‘PHP’ 分類過的Archive

如何使用獲取用戶IP地址的三個屬性以得到使用者的真實IP(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)

2011年10月18日 尚無評論

有些人會使用proxy這個方法來達到網頁加速的目的,但是這麼一來也間接地讓php傳統的偵測ip方式無法偵測到使用者真實的ip。而如果有心人士要攻擊網站,又走proxy的話,這時怎麼得到他的真實ip呢?

你可以透過以下的方法來偵測:

<?php
if (!empty($_SERVER['HTTP_CLIENT_IP']))
    $ip=$_SERVER['HTTP_CLIENT_IP'];
else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
    $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
else
    $ip=$_SERVER['REMOTE_ADDR'];

echo $ip;
?>

 

 

一、沒有使用代理服務器的情況:

      REMOTE_ADDR = 您的 IP

      HTTP_VIA = 沒數值或不顯示

      HTTP_X_FORWARDED_FOR = 沒數值或不顯示

二、使用透明代理服務器的情況:Transparent Proxies

      REMOTE_ADDR = 最後一個代理服務器 IP

      HTTP_VIA = 代理服務器 IP

      HTTP_X_FORWARDED_FOR = 您的真實IP ,經過多個代理服務器時,這個值類似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   這類代理服務器還是將您的信息轉發給您的訪問對象,無法達到隱藏真實身份的目的。

三、使用普通匿名代理服務器的情況:Anonymous Proxies

      REMOTE_ADDR = 最後一個代理服務器 IP

      HTTP_VIA = 代理服務器 IP

      HTTP_X_FORWARDED_FOR = 代理服務器IP ,經過多個代理服務器時,這個值類似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   隱藏了您的真實IP,但是向訪問對象透露了您是使用代理服務器訪問他們的。

四、使用欺騙性代理服務器的情況:Distorting Proxies

      REMOTE_ADDR = 代理服務器 IP

      HTTP_VIA = 代理服務器 IP

      HTTP_X_FORWARDED_FOR = 隨機的IP ,經過多個代理服務器時,這個值類似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   告訴了訪問對象您使用了代理服務器,但編造了一個虛假的隨機IP代替您的真實IP欺騙它。

五、使用高匿名代理服務器的情況:High Anonymity Proxies (Elite proxies)

      REMOTE_ADDR = 代理服務器 IP

      HTTP_VIA = 沒數值或不顯示

      HTTP_X_FORWARDED_FOR = 沒數值或不顯示,經過多個代理服務器時,這個值類似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   完全用代理服務器的信息替代了您的所有信息,就像您就是完全使用那台代理服務器直接訪問對象。

 

參考資料:http://www.inote.tw/2009/04/php-ip.htmlhttp://www.cnblogs.com/craig/archive/2008/11/18/1335809.html

可以在前端實現的幾個地理位置小功能

2010年12月10日 尚無評論

原文網址:http://www.oncoding.cn/2010/geo-location-frontend/

在Smashing Magazine上看到這篇Entering The Wonderful World of Geo Location,介紹了獲取並處理用戶地理位置的應用和方法,很有意思。結合原文的內容,加上之前的一些應用,整理了幾個可以完全在前端實現的地理位置相關小功能。
1.通過IP獲取用戶位置
很多時候需要通過IP判斷用戶的位置,通常的辦法是通過自己的後臺程式查詢資料庫得到。如果用戶位置只是應用在前端,或者有其他的特殊原因(比如,懶:),也有一些其他辦法來快速的獲取用戶位置。
maxmind.com提供了一個服務,通過引入一個js檔(http://j.maxmind.com/app/geoip.js),可以把他判斷到的用戶的國家、城市、經緯度等資訊加入到頁面中來。下面是從青島訪問這個js檔返回的內容:

function geoip_country_code() { return 'CN'; }
function geoip_country_name() { return 'China'; }
function geoip_city() { return 'Qingdao'; }
function geoip_region() { return '25'; }
function geoip_region_name() { return 'Shandong'; }
function geoip_latitude() { return '36.0986'; }
function geoip_longitude() { return '120.3719'; }
function geoip_postal_code() { return ''; }

閱讀全文...

Categories: Javascript, PHP Tags: , , , ,

用Duplicate Post外掛複製WordPress文章或分頁

2010年9月2日 尚無評論

有時我們的Wordpress文章只需改部分內容,不需要變動很多的時候,就可利用這個Wordpress的外掛 Duplicate Post 複製文章或分頁

  • 軟體名稱:Duplicate Post
  • 軟體版本:1.1.1
  • 軟體語言:英文
  • 軟體性質:免費軟體
  • 系統支援:此為WordPress網站的外掛程式,支援WP 2.7以上版本
  • 官方網站:按這裡
  • 軟體下載:按這裡
  • 安裝教學:按這裡
  • 安裝並啟用後,會出現在2個地方:

    1.後台List頁面Duplicate按鈕連結

    duplicate

    2.編輯頁面的位置

    Duplicate2

    當點擊 Duplicate 按鈕的時候,對應的文章或者分頁就會被複製成另外一篇文章或者分頁,並在“編輯頁面”打開。複製好的文章或者分頁,除了 URL 之外,其他的內容(包括標籤、摘要、分類等)都和被複製的文章或者頁面是一模一樣的。

    Categories: WordPress Tags:

    PHP限制顯示字數語法,中英文混雜時不亂碼

    2010年9月1日 尚無評論

    這是在UTF-8網頁編碼的環境下使用,我參考神隱部落所修改的PHP限制顯示字串語法,原作者的語法我使用後發現,當實際字數少於需要顯示的字數的時候,後面3個...還是會出現??
    原來是寫成 if (strlen($a) > $b) echo "...";
    照理說應該這樣字數應該能夠比較才對,
    不知是變數$b沒有轉成數字型態還是怎樣,所以我將strlen($a) > $b 改為 strlen($a) > strlen($sub_content)
    2個變數都先用strlen取得字串長度,再進行比較,就正常了,
    而且不會有中英文混雜時亂碼的問題

    <?php
    //裁切字串
    function cut_content($a,$b){
        $a = strip_tags($a); //去除HTML標籤
        $sub_content = mb_substr($a, 0, $b, 'UTF-8'); //擷取子字串
        echo $sub_content;  //顯示處理後的摘要文字
        //顯示 "......"
        if (strlen($a) > strlen($sub_content)) echo "...";
    }
    
    //以上程式已經包裝起來,您可存放在例如:function.php網頁
    //往後只要使用include("function.php");
    //加上 cut_content($a,$b);即可,不需每次撰寫.
    //$a代表欲裁切內容.
    //$b代表欲裁切字數(字元數)
    ?>
    
    Categories: PHP, 程式設計 Tags: , , ,

    PHP判斷Client端瀏覽器是否為IE6.0

    2010年8月31日 尚無評論

    IE6.0實在是所有網頁設計者的夢靨,有些頁面如IE6.0不支援,乾脆直接跳出警告或轉頁,底下是偵測Client端瀏覽器版本是否為IE6.0

    if(strpos($_SERVER['HTTP_USER_AGENT'],'MSIE 6.0') == true )
    {
        // ie 6.0
        header('Location: ../ie6_page.php');
    }
    else
    {
        //not ie 6.0
        header('Location: ../not_ie6_page.php');
    }
    

    如果去掉6.0的話就只檢查是不是IE

    Categories: PHP Tags: ,