【发布时间】:2014-02-14 09:01:22
【问题描述】:
如果我设置一个变量如下:
$randNum = md5(time());
并使用它来创建:
$tempFileName = $randNum.'_temp.'.$type;
然后,在脚本的后面:
$newFileName = $randNum.'_new.'.$type;
它会第二次生成一个新的随机数还是$randNum 的值与第一次相同?
【问题讨论】:
-
$randNum = md5(time());用过一次,你还在用吗? -
不再次拨打
$randNum = md5(time());同第一次 -
创建一个生成随机数的函数并一遍又一遍地调用该函数。比如
function RandomNumber() { return md5(time()); },测试用例:for ($i=0; $i<10; $i++) { echo RandomNumber(), "\n"; } -
这里有一个竞争条件。
time()的粒度只有 1 秒。如果脚本在一秒钟内运行两次,那么第二次运行时它将覆盖第一次运行的文件。 -
另外请记住,使用
time()不是一个好主意,因为它可能会阻塞并发访问,而是使用uniqid()