2012-12-04 97 views
1

我正在測試寫入PHP的日誌模塊。我怎樣才能在PHP中獲得唯一的事務ID?

  1. 網絡服務器發生太多事務。
  2. 寫入同一文件的每筆交易。 (log.txt)
  3. 我怎麼能記錄這個交易在同一個文件多行?

下面的日誌示例。

12月5日1點50分02秒[信息] REQ [1111111111111]:PARAM = 1

12月5日1點50分02秒[信息] REQ [2222222222222]:PARAM = 2

12月5日一點50分02秒[信息] RES [2222222222222]:RES = 20

12月5日一點50分02秒[信息] RES [1111111111111]:RES = 10

好,我發現uniqid()的解決方案。

但是它基於時間戳,所以它在同一時間和同一臺機器上並不是唯一的巨大請求。

PHP不支持THREAD。 如果其他語言(如C,JAVA),最好的解決方案是使用[線程ID]每個線程或進程,我猜。

PHP的任何想法?

對不起英語不好。

+0

也許使用$ _SESSION? –

回答

2

首先,檢查uniqid('', true)是否提供了足夠的熵沒有冗餘。

其次,嘗試跟蹤sessions的人。這將允許您單獨識別人員和交易。

1

您可以使用用戶的userid。他們將永遠是唯一的權利?爲了獲得更多的唯一性嘗試散列用戶標識符或他們的電子郵件ID,並附加當前microtime並將其用於日誌文件中。這將主要即使用戶發送重複請求也是唯一的,因爲microtime將在連續請求之間明確地改變。

$id=$userid.$emailid.uniqid(); 
$uid=md5($str); 

這可能是一個很大的問題,如果在小循環內使用。因爲小循環內microtime幾乎沒有變化。

+1

+1也是個好主意 – TaeL