php 8.3 已移除 randomextension,随机功能全内置;推荐使用 random_int() 和 random_bytes() 替代废弃的 mt_rand() 等函数,安全可靠无需手动播种。

PHP 8.3 没有叫 RandomExtension 的扩展——它根本不存在,也不需要手动启用。所有随机数能力都已内建在核心中,调用方式和过去完全不同。
random_int() 和 random_bytes() 是默认安全选择
微服务里生成幂等 ID、临时 token、限流 salt,必须用加密安全的随机源。PHP 8.3 已弃用 mt_rand()、rand()、mt_srand()(自 8.3.0 起标记为废弃),直接用以下两个函数即可:
-
random_int(0, 9999):生成指定范围的加密安全整数,替代旧版mt_rand() -
random_bytes(16):生成 16 字节加密随机字节,常配合bin2hex()构造 token:bin2hex(random_bytes(16)) - 它们底层自动使用
random\engine\secure,无需手动选引擎或播种 - 不支持传入 seed —— 这是故意设计,避免开发者误用可预测种子破坏安全性
需要可控/可重现随机序列?用 Randomizer + 显式引擎
测试场景(如 mock 时间序列、固定采样逻辑)要求“相同输入 → 相同输出”,就得绕过默认 secure 引擎,显式构造 Randomizer:
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 用
Xoshiro256StarStar替代已废弃的mt19937:$r = new \Random\Randomizer(new \Random\Engine\Xoshiro256StarStar(12345)); - 再调用
$r->getInt(1, 100)或$r->getBytes(8) - 注意:
\Random\Engine\Mt19937在 PHP 8.3 中仍存在但被标记为废弃,不要用 - 种子值建议用 int,别传字符串或 float,否则可能截断或隐式转换出错
json_validate() 不是随机函数,别混淆
搜索时容易把 json_validate()(PHP 8.3 新增)和随机功能混在一起——它只做 JSON 语法校验,和随机数完全无关。如果你看到文档里它和 random_* 并列,只是因为都属于“PHP 8.3 新增函数”这个宽泛分类。
-
json_validate('{ "a": 1 }')返回true/false,不抛异常 - 它不生成、不消费、不依赖任何随机行为
- 若你在微服务里做 payload 校验,用它比
json_decode(..., null, JSON_THROW_ON_ERROR)更轻量
真正容易被忽略的是:所有 random_* 函数在 CLI 模式下和 FPM 下行为一致,但如果你在 Swoole 长生命周期进程中反复调用 random_bytes(),不会累积熵耗尽——PHP 内核已处理好重用与刷新。别自己加 cache 层,反而引入状态泄漏风险。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










