如何在Repl.it中通过环境变量正确创建PHP数组随机选取密钥
问题原因
你当前代码逻辑错误的核心原因是:getenv()读取到的环境变量值是完整的字符串类型,直接把整个字符串传入array()构造函数,只会得到一个长度为1的数组——唯一的元素就是你存储的所有密钥拼接成的整段文本,array_rand()永远只能取到这唯一的元素,随机分发逻辑自然失效。
修复方案
你只需要在读取到环境变量字符串后,按照你存储密钥时用的分隔符把字符串拆分成数组即可,从你的环境变量配置形式看,你是每个密钥单独占一行存储,直接用换行符拆分就行,完整可用代码如下:
<?php // 读取存储密钥的环境变量 $loadstring = getenv('cheatxkeys'); // 按换行符拆分字符串为数组,同时过滤空行、首尾空白字符,避免抽到无效空值 $items = array_filter( explode(PHP_EOL, $loadstring), fn($key) => trim($key) !== '' ); // 重置数组索引,避免过滤空值后键名不连续引发array_rand报错 $items = array_values($items); // 随机选取一个密钥 $trollitem = $items[array_rand($items)]; ?>
适配说明
- 如果你存储密钥时用的不是换行分隔,而是英文逗号、竖线
|等其他分隔符,只需要把explode()函数的第一个参数替换成你实际用的分隔符即可,比如逗号分隔就写explode(',', $loadstring) - 建议额外加一层兜底校验,避免环境变量配置错误导致页面报错,参考代码:
<?php $loadstring = getenv('cheatxkeys'); if (!$loadstring) { // 替换为你自己的错误处理逻辑 exit("密钥配置加载失败"); } $items = array_filter( explode(PHP_EOL, $loadstring), fn($key) => trim($key) !== '' ); $items = array_values($items); if (empty($items)) { exit("无有效可用密钥"); } $trollitem = $items[array_rand($items)]; ?>
内容的提问来源于stack exchange,提问作者grf
相关产品推荐
相关产品推荐

