Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP为已缩放的服务器生成唯一ID?_Php_Scale - Fatal编程技术网

如何使用PHP为已缩放的服务器生成唯一ID?

如何使用PHP为已缩放的服务器生成唯一ID?,php,scale,Php,Scale,我正在服务器上使用PHP函数uniqid()。应该是微时间。所以我认为它对于一台服务器来说是独一无二的。对吗 如果使用负载平衡器扩展服务器,如何获得唯一id?我需要一个少于31个字符的字符串 谢谢您应该将前缀设置为唯一的字符串(每个服务器的唯一性是您的系统)。例如主机名或IP地址。将该值保持在17个字符以下(如果使用额外的熵,则为7个)。是的,正如它所说,它基于当前时间(以微秒为单位) 您可以使用prefix参数传入主机特定的前缀 即使使用more\u entropy参数,前缀仍有7个字符,允许

我正在服务器上使用PHP函数uniqid()。应该是微时间。所以我认为它对于一台服务器来说是独一无二的。对吗

如果使用负载平衡器扩展服务器,如何获得唯一id?我需要一个少于31个字符的字符串


谢谢

您应该将前缀设置为唯一的字符串(每个服务器的唯一性是您的系统)。例如主机名或IP地址。将该值保持在17个字符以下(如果使用额外的熵,则为7个)。

是的,正如它所说,它基于当前时间(以微秒为单位)

您可以使用
prefix
参数传入主机特定的前缀

即使使用
more\u entropy
参数,前缀仍有7个字符,允许使用256**7台主机。

试试看

$uid = uniqid($serverId, true);
这将为每个
$uid
加上
$serverId

前缀。对于作为第一个参数传递的每个服务器,可以使用带有不同前缀的
uniqid()

string uniqid([string$prefix=”“[,bool$more\u entropy=false]])

前缀

例如,如果生成标识符,则可能非常有用 同时在多个主机上 可能会产生 相同微秒的标识符。
如果前缀为空,则返回 字符串长度为13个字符。如果 如果熵越大,则为23 人物

例如:

$serverId = str_replace('.', '', $_SERVER["SERVER_ADDR"].$_SERVER["SERVER_PORT"]);
$uid      = substr(uniqid($serverId, true), 0, 30);

或者查看这个伟大的uuid()函数:

我建议组合多个熵源。这样,您就不会依赖于某些假设(本地IP地址不同)或运气(两台服务器不会在同一时间做完全相同的事情)

我想到的东西(非常便携,不是特定于平台的):

  • 纳米时代
  • 打开并计算其中的文件大小
  • 当前脚本的文件系统日期戳
  • 运行一个简单的无操作循环并计算其持续时间

毕竟,您可以将其用作某个哈希函数的输入,只需将其规格化为30字节的字符串(例如,输入值的
strval()
串联的md5sum的最后30字节)。

使用$serverId的事情非常明显。但是我可以为$serverId使用什么呢?好吧,为每台服务器手动配置它,或者可能使用类似于
uniqid的东西(ip2long($\u server['server\u ADDR']),true)
…我可以为$serverId使用什么呢?请参阅@qbert220的注释,它表示您可以使用服务器的ip地址或任何其他特定于服务器的名称/字符串。我更新了上面的示例。您有“服务器地址”的替代方案吗?目前对IIS的支持并不重要。如果我打电话就可以了。如果我调用本地系统上的服务器\ u ADDR is::1,您如何识别您的服务器?他们有不同的名字吗?