gpt4 book ai didi

php - 以微秒为单位的时间戳是否总是唯一的?

转载 作者:可可西里 更新时间:2023-11-01 12:51:25 24 4
gpt4 key购买 nike

PHP 中的uniqid() 根据当前时间戳以微秒为单位生成唯一ID。这真的是生成唯一 ID 的万无一失的方法吗?

即使假设有一个用户运行一个脚本,循环生成以微秒为单位的时间戳,理论上是否真的可以保证它是唯一的?在实践中,可能性完全可以忽略不计吗?

为清楚起见,假设您的循环仅此而已:

foreach($things as $thing){
var_dump(microtime());
}

理论上是否有可能它不是唯一的?如果是,它在实践中的现实性如何?

最佳答案

基于微秒的 id​​ 只保证在一定范围内是唯一的。在这方面,单台计算机上的单线程脚本可能非常安全。然而,一旦您开始谈论并行执行,无论是在同一台机器内的多个 CPU 上还是特别是在多台机器上,所有的赌注都将落空。

所以这取决于你想用这个 id 做什么。如果您只是使用它来生成一个仅在同一脚本中使用的 id,那么它可能足够安全。例如:

<?php $randomId = uniqid(); ?>
<div id="<?php echo $randomId; ?>"></div>
<script>
var div = document.getElementById('<?php echo $randomId; ?>');
...
</script>

在这种有限的使用情况下,您很可能不会在这里遇到任何问题。

但是,如果您开始使用 uniqid 或与其他外部脚本共享的其他此类用途来生成文件名,我不会依赖它。对于文件名,使用基于文件内容的散列可能是个好主意。对于通用分散随机生成的 ID,UUIDs很合适(因为它们就是为此目的而设计的)。

关于php - 以微秒为单位的时间戳是否总是唯一的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26882872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com