如何在PHP中获得唯一的事务ID?

时间:2012-12-04 17:14:30

标签: php multithreading transactions unique-id

我正在测试我用PHP编写的日志模块。

  1. 网络服务器发生了太多交易。
  2. 每个事务都写在同一个文件上。 (log.txt的)
  3. 如何在多个行的同一文件中记录此事务?
  4. 在日志示例下面。

      

    Dec 05 01:50:02 [info] REQ [1111111111111]:param = 1

         

    Dec 05 01:50:02 [info] REQ [2222222222222]:param = 2

         

    Dec 05 01:50:02 [info] RES [2222222222222]:res = 20

         

    Dec 05 01:50:02 [info] RES [1111111111111]:res = 10

    好的,我找到了uniqid()的解决方案。

    但是它基于时间戳,因此它不是同一时间和同一台机器上唯一的巨大请求。

    PHP不支持THREAD。 如果其他语言(如C,JAVA),最佳解决方案是使用[thread id]每个线程或进程,我猜。

    关于PHP的任何想法?

    抱歉英语不好。

2 个答案:

答案 0 :(得分:2)

首先,检查uniqid('', true)是否提供了足够的熵以使其没有冗余。

其次,尝试使用sessions跟踪人员。这样您就可以单独识别人员和交易。

答案 1 :(得分:1)

您可以使用用户的用户ID。它们总是唯一的吗?为了获得更多的唯一性,请尝试哈希用户ID或其电子邮件ID以及附加当前的microtime并在日志文件中使用它。这将是最独特的即使用户发送重复请求,因为microtime将在连续请求之间明确地改变。

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

如果在小循环中使用,这可能是个大问题。因为在小循环内部,微缩胶片几乎不会改变。