2014-07-05 34 views
-3

我正在管理一個PHP網站,爲訪問者提供獎勵。每24小時已經有一個IP地址的限制,但我們需要將此限制延伸到每小時一個IP。目前,我們可以在同一範圍內看到多達30個IP地址,聲稱獎勵。僅比較IP地址的前三個部分是否重複

我有一個數據庫結果的IP地址在過去一小時中看到,我有用戶當前的IP地址。

我想知道如果有人知道一個很好的功能使用或有自己的比較,如果用戶目前的IP屬於在過去一小時看到的網絡。從下面的同一IP地址我們想要比較,如果1,2和3匹配,則返回true。如果我們得到一個匹配,那麼沒有報酬支付

例IP 1.2.3.4(比賽1,2和3將返回true。全場比賽已經檢查了。)

,並且用戶必須返回後來。我假設網絡管理員正在利用他們的資源從我們的網站收穫獎勵,這對其他想參與其中的人不公平。

+4

我可以通過拔下路由器的交流電纜每分鐘獲得一個新IP。 - >忘記您的IP限制,使用用戶認證 – hek2mgl

+1

您的數據庫是否將IP地址存儲爲字符串或32位整數? – clockworkgeek

+3

另外,不同訪問者可以使用相同的IP地址,並且他們都應該有權要求價格。專注於用戶而不是IP地址。 –

回答

1

好的,因爲每個人都忙着說這是一個多麼愚蠢的事情,而不是回答這個問題,我會自己回答。假設我們有這樣做的正當理由,而不是花時間解釋我們的理由!

我使用本地IP地址,並使用爆炸功能將其轉換爲數組。

$ipArray = explode(".", $ip, 4); 

然後我刪除了最後一項。

array_pop($ipArray); 

然後我通過外部IP地址迭代(如果有的話)並對每個IP地址做相同的處理。

$exArray = explode(".", $exIP, 4); 
array_pop($exArray); 

最後,我需要做的就是比較兩個陣列。

if ($ipArray == $exArray) { return true; } 

也許有一個更簡單的方法來做到這一點,但這對我們來說工作得很好。我們已經失去了我們網站上的獎勵,只有極少數網絡管理員使用他們的資源來剝離我們的網站。與在短短几秒內獲得200獎勵的人相比,拔下並重新插入路由器以獲得新IP是沒有任何意義的。

以下是使用的完整代碼。 https://github.com/Bushstar/applebyte-faucet/commit/643bcd2111378bd6d1b2da34357290bd1d4136ae

+0

'有效原因:聲望+ 15' – Jamie