2010-09-15 48 views
0

的目的,我有一個變量什麼是CRC函數在PHP

$offset = abs(crc32($_SERVER["SERVER_NAME"]) % 500); 

,我不知道這是在腳本的地方。它似乎要做的是根據服務器名稱(例如www.example.com)生成一個隨機數。這是這個變量的正確解釋嗎?

感謝

+0

絕對不是隨機的。 – hsz 2010-09-15 14:17:45

回答

2

CRC32創建名稱的Cyclic redundancy check,然後通過500跳模它進一步減少到0和499之間的數字的第一部分基本上是服務器名的簽名 - 這不是一個隨機數完全相同(在它的原始形式CRC可以用來重建受損的數據),在這裏它更像是一個散列。第二部分是減小散列的大小/規模,以便每個訪問的服務器獲得一個介於0和499之間的數字。雖然沒有真正的保證,但希望兩個服務器的數量是相同的。

+0

等等,爲什麼數字會改變?該腳本將在我的服務器上運行,該服務器具有固定的服務器名稱:www.example.com。那麼你是說當用戶訪問我的網站時,他們將被分配不同的$偏移量變量?因爲他們從不同的服務器上進行遊戲? – 2010-09-15 14:30:10

+0

不,它對於你的服務器總是一樣的,但是如果你移動服務器或者重命名它,那麼這個數字就會改變。在不知道整個腳本的情況下很難評論這一觀點,但基本上它似乎允許代碼(a)確定您已經移動了服務器,或者(b)立即在多個服務器上運行,並將其存儲在單個數據庫中並標識資源。 – Rudu 2010-09-15 14:39:32

+0

感謝Rudi,這是最豐富的 – 2010-09-15 14:43:38

2

是的,它使0和499只如果服務器名稱不同,不同的數字。

  • Crc32從字符串中獲取數字校驗和。
  • %500使之在-499和499之間。
  • abs使負數爲正數。