必须引入Paragonie/random_compat包以支持PHP 5环境下的random_bytes()和random_int()函数;可通过Composer全局require或指定PHP 5专用版本约束两种方式安装并自动加载。

如果您在ThinkPHP项目中需要为PHP 5环境补充安全随机数生成功能,则必须引入Paragonie/random_compat包以提供random_bytes()和random_int()函数支持。以下是针对ThinkPHP项目的多种兼容性安装方法:
一、通过Composer全局require安装
该方式适用于ThinkPHP 5.x及以下版本,且项目已启用Composer自动加载机制。安装后,random_compat将作为顶层依赖注入autoload流程,无需手动引入即可在任意控制器或模型中调用安全随机函数。
1、进入ThinkPHP项目根目录(即包含composer.json和think入口文件的目录)。
2、执行命令:composer require paragonie/random_compat:>=2。
立即学习“PHP免费学习笔记(深入)”;
3、确认vendor/autoload.php已在public/index.php或thinkphp/start.php中被正确引入。
4、在业务代码中直接使用:random_bytes(32)或random_int(1000, 9999)。
二、指定PHP 5专用版本约束安装
当ThinkPHP部署于严格限定为PHP 5.4–5.6的生产环境时,应避免意外升级至9.99.99空实现版本,确保始终使用polyfill逻辑。此方式通过版本上限锁定强制启用兼容层。
1、在项目根目录下运行:composer require paragonie/random_compat:。
2、检查composer.lock中paragonie/random_compat的version字段是否为2.x或9.98.x区间内数值。
3、验证vendor/paragonie/random_compat/lib/random.php文件存在且非空。
4、在application/common.php中添加防御性检测:if (!function_exists('random_bytes')) { require_once VENDOR_PATH . 'paragonie/random_compat/lib/random.php'; }。
三、手动引入lib/random.php(无Composer环境)
适用于无法运行Composer命令的受限服务器,例如部分共享主机或离线开发环境。该方式绕过自动加载,以显式require确保函数注册,适配ThinkPHP早期版本的加载机制。
1、从官方镜像下载稳定版源码:git clone https://gitcode.com/gh_mirrors/ra/random_compat。
2、将random_compat/lib/目录整体复制至ThinkPHP项目的extend/目录下,路径为extend/random_compat/lib/。
3、在application/tags.php的app_init钩子中插入初始化代码:
if (!function_exists('random_bytes')) { require_once EXTEND_PATH . 'random_compat/lib/random.php'; }。
4、清除Runtime/Cache目录以避免类加载缓存干扰。
四、PHAR包直引方式(高隔离需求场景)
当ThinkPHP运行于多租户环境或需规避vendor目录污染时,可采用签名PHAR包形式集成。该方式将全部逻辑封装为单文件,不依赖外部扩展声明,适合审计敏感系统。
1、访问https://github.com/paragonie/random_compat/releases下载最新ECDSA签名PHAR包(如random_compat-9.98.1.phar)。
2、将PHAR文件存放至public/static/phar/目录。
3、在public/index.php顶部添加:if (!function_exists('random_bytes')) { require_once __DIR__ . '/static/phar/random_compat-9.98.1.phar'; }。
4、执行php -d phar.readonly=0 public/static/phar/random_compat-9.98.1.phar --verify验证签名完整性。
五、依赖扩展强制校验与启用
random_compat在PHP 5下运行依赖openssl和mbstring扩展。若缺失任一扩展,库将在首次调用时抛出Exception而非静默降级,因此必须前置验证。
1、创建extend/check_random_deps.php脚本,内容为:extension_loaded('openssl') && extension_loaded('mbstring') or die('Missing openssl or mbstring');。
2、在application/command.php中注册自定义命令,启动时自动执行该脚本。
3、Linux环境下执行:sudo phpenmod openssl mbstring启用扩展。
4、Windows环境下编辑php.ini,取消以下两行前的分号:extension=php_openssl.dll与extension=php_mbstring.dll。



















