我在想,有没有人知道PHP中的uniqid函数是否有固定的大小?如果有,它有多少个字符?我有点困惑,因为PHP手册说,当使用扩展熵时,uniqid长度为23个字符。但是根据我的观察,它的长度在26到28个字符之间变化。
我在想,有没有人知道PHP中的uniqid函数是否有固定的大小?如果有,它有多少个字符?我有点困惑,因为PHP手册说,当使用扩展熵时,uniqid长度为23个字符。但是根据我的观察,它的长度在26到28个字符之间变化。
我无法确认这种行为:
php -r 'for($i = 0; $i < 1000; $i++) print strlen(uniqid("", true)) . "\n";'
在OS X和Ubuntu上测试PHP 5.3.x,每次迭代产生23个结果。
你使用的操作系统和PHP版本是什么?
正如OP在他的评论中指出的那样:省略前缀应该可以解决问题;)
更详细地说,我们可以查看PHP源代码:https://svn.php.net/viewvc/php/php-src/tags/php_5_3_8/ext/standard/uniqid.c?view=markup,第79行:
spprintf(&uniqid, 0, "%s%08x%05x%.8F", prefix, sec, usec, php_combined_lcg(TSRMLS_C) * 10);
如果没有提供前缀并且查找php_combined_lcg
的定义,它会返回一个浮点数,其中包含一个前导小数,则uniqid
的输出应始终为23个字符长。
uniqid
函数时没有提供前缀吗? - eykanaluniqid
返回超过23个字符的吗?我们是否在谈论原生的PHPuniqid
函数,还是一些模拟GUID的自定义函数? - N.B.