You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何按顺序调用代理列表 实现代理依次取用而非随机选取

PHP顺序轮询代理IP的代码调整方案

你原有代码通过rand(0, count($proxylist) - 1)生成随机数组索引,所以每次拿到的代理都是随机的。要实现按列表顺序从头到尾循环取用代理,核心是解决PHP请求无状态的问题:每次请求结束后内存变量会销毁,所以需要持久化存储当前取用的代理位置索引,下次请求读取索引后自增,到列表末尾就重置为0从头开始。


具体实现代码(无额外依赖,用文本文件存索引)

<?php
// 读取代理列表,自动过滤空行、每行首尾的换行和空格
$proxylist = array_filter(array_map('trim', file("proxies.txt")), function($line) {
    return strlen($line) > 0;
});
// 索引存储文件,用来记录当前已经用到了代理列表的第几个位置
$indexStorage = 'proxy_current_index.txt';

// 索引文件不存在时初始化,默认从第一个代理(索引0)开始
if (!file_exists($indexStorage)) {
    file_put_contents($indexStorage, '0');
}
// 读取当前索引值
$currentIndex = (int)file_get_contents($indexStorage);
// 索引超出代理列表总长度时,重置为0实现循环
if ($currentIndex >= count($proxylist)) {
    $currentIndex = 0;
}

// 解析当前索引对应的代理信息
$proxyItem = explode(":", trim($proxylist[$currentIndex]));
$proxyIp = trim($proxyItem[0]);
$proxyPort = trim($proxyItem[1]);
$formattedProxy = $proxyIp . ":" . $proxyPort;

// 索引自增后存回文件,供下一次请求使用
file_put_contents($indexStorage, (string)($currentIndex + 1));

echo $formattedProxy;

注意事项

  • 代码运行前请确保PHP对当前代码目录有读写权限,会自动生成proxy_current_index.txt文件存储索引,不要手动修改这个文件里的数字
  • 上述实现适合低并发场景,如果你的请求并发量很高,文件读写可能出现索引重复的问题,可以把索引存储替换为Redis,用INCR原子命令做自增,准确性和性能更好
  • 代码默认兼容proxies.txt里存在空行、每行带多余空格/换行的情况,不需要提前手动清理代理列表文件

内容的提问来源于stack exchange,提问作者Arees Chan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:48:16