lstrojny/pistis

PHP 的可控伪随机数和时间

v0.4 2017-11-09 17:02 UTC

This package is auto-updated.

Last update: 2024-09-16 06:09:47 UTC


README

伪随机数

代码生成通常使用随机标识符/数字来生成无冲突的标识符。这些随机标识符使得可重复构建成为不可能,因为无法使随机性确定。

为了避免这种情况,pistis 提供了一个简单的接口来使用伪随机数和十六进制字符串,这些字符串可以用作标识符的一部分,从而实现可重复构建。Pistis 允许通过环境变量 PISTIS_SEED 传递上一个种子,以便进行第二次运行。

时间

另一个准随机性的来源是时间。可以通过调用如 time() 的函数来接收时间信息。通过将这些函数替换为 Pistis\Clock::unixTimestamp(),可以固定时间以实现可重复构建。

<?php
include 'vendor/autoload.php';

use Pistis\PseudoRandom;
use Pistis\Clock;

var_dump(PseudoRandom::integer());
var_dump(PseudoRandom::integer());
var_dump(PseudoRandom::hex());
var_dump(PseudoRandom::hex());
var_dump(Clock::unixTimestamp());

echo 'PRNG seed: ' . PseudoRandom::getSeed() . "\n";
echo 'Time seed: ' . Clock::getSeed() . "\n";

运行此代码,PHP 将输出类似以下内容

int(1625705860186051574)
int(8240691892729656673)
string(8) "195251fc"
string(8) "1cc6a0e8"
int(1510246905)
PRNG seed: 1353038704721151717
Time seed: 1510246905

使用 PISTIS_SEED=1353038704721151717 PISTIS_TIME=1510246905 php example.php 重新运行相同的脚本将再次输出相同的数字

int(1625705860186051574)
int(8240691892729656673)
string(8) "195251fc"
string(8) "1cc6a0e8"
int(1510246905)
PRNG seed: 1353038704721151717
Time seed: 1510246905