讲师中心 微信公众号
AI工具推荐 视频效率加速

短链接怎么批量还原php_用多线程脚本提升处理速度【指南】

酷伟吖_5977

酷伟吖_5977

发布时间:2025-12-31 23:14:02

|

214人浏览过

|

来源于php中文网

原创

file_get_contents()无法批量还原短链接,因其默认跟随重定向且不返回响应头,导致无法获取Location字段;串行调用效率极低。应使用cURL多路复用,禁用自动跳转、只取响应头、提取Location,并处理3xx状态码、超时及反爬限制(如Referer、UA、DNS缓存等)。

短链接怎么批量还原php_用多线程脚本提升处理速度【指南】

为什么 file_get_contents() 不能直接批量还原短链接

短链接还原本质是发起 HTTP 请求并读取重定向目标(Location 响应头),而 file_get_contents() 默认不返回响应头,且无法控制跟随重定向的深度和行为。直接用它会拿到跳转后的页面内容,而非原始长 URL;更严重的是,串行调用会极慢,100 个链接可能耗时几十秒甚至分钟。

用 cURL + curl_multi_exec() 实现真正并发请求

PHP 原生支持多路复用 cURL 句柄,比开进程/线程更轻量、更可控。关键点在于:禁用自动跳转、只取响应头、提取 Location 字段,并正确处理 3xx 状态码和空/无效重定向。

  • 必须设置 CURLOPT_FOLLOWLOCATION = false,否则拿不到原始响应头
  • 必须启用 CURLOPT_HEADER = true,但注意响应体和头混在一起,需手动分离
  • 对返回状态码非 3xx 的链接(如已失效、404、被拦截),应返回原短链或空值,避免误判
  • 建议加 CURLOPT_TIMEOUT = 5 防止单个请求拖垮整批任务
$urls = ['https://t.co/abc123', 'https://bit.ly/xyz789'];
$mh = curl_multi_init();
$chs = [];

foreach ($urls as $i => $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
    curl_multi_add_handle($mh, $ch);
    $chs[$i] = $ch;
}

$running = null;
do {
    curl_multi_exec($mh, $running);
} while ($running > 0);

$results = [];
foreach ($urls as $i => $url) {
    $header = curl_multi_getcontent($chs[$i]);
    $redirect = '';
    if (preg_match('/^Location:\s*(.+)$/mi', $header, $m)) {
        $redirect = trim($m[1]);
    }
    $results[] = ['short' => $url, 'long' => $redirect];
    curl_multi_remove_handle($mh, $chs[$i]);
    curl_close($chs[$i]);
}
curl_multi_close($mh);

var_dump($results);

遇到 302 但 Location 为空?检查 Referer 和 UA 限制

很多短链服务(如微博、微信)会校验 Referer 或拒绝非常规 User-Agent,导致返回 302 却不带 Location,或直接返回 403。这不是代码问题,而是反爬策略。

微信公众号产业研究发文助手
微信公众号产业研究发文助手

将产业文章整理为适合微信公众号/服务号发布的研究型草稿,支持原文读取、分层摘要、产业链标的梳理、image2 海报与封面生成、正文排版、微信草稿保存、回读校验和发布前确认。适用于鹊桥产业等服务号的半导体、AI 算力、先进封装、光通信、新能源、机器人等产业链研究内容。

下载
  • 加上 CURLOPT_REFERER(例如设为 https://www.google.com)可绕过部分检测
  • CURLOPT_USERAGENT 必须设为真实浏览器标识,不能留空或用默认值
  • 某些平台(如 dwz.cn)还要求携带 Cookie 或额外 Header,需抓包确认

别忽略 DNS 和连接复用开销

批量还原上百个不同域名的短链时,DNS 解析和 TCP 连接建立本身就会成为瓶颈。cURL 多路复用虽共享 event loop,但默认不复用 DNS 缓存和连接池。

立即学习“PHP免费学习笔记(深入)”;

  • 加 CURLOPT_DNS_CACHE_TIMEOUT = 300 避免重复查 DNS
  • 加 CURLOPT_TCP_KEEPALIVE = 1 和 CURLOPT_FORBID_REUSE = false 提升复用率
  • 如果目标域名高度集中(如全是 t.co),效果更明显;若分散在 50+ 不同根域,仍建议分组限速(如每批 ≤20 个)

真正卡住的地方往往不是 PHP 逻辑,而是网络层响应质量——超时、丢包、WAF 拦截,这些没法靠“加线程”解决。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

12159

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1186

2023.11.23

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

824

2024.02.23

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

1926

2025.08.19

curl_exec
curl_exec

curl_exec函数是PHP cURL函数列表中的一种,它的功能是执行一个cURL会话。给大家总结了一下php curl_exec函数的一些用法实例,这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。他的返回值成功时返回TRUE, 或者在失败时返回FALSE。

3703

2023.06.14

linux常见下载安装工具
linux常见下载安装工具

linux常见下载安装工具有APT、YUM、DNF、Snapcraft、Flatpak、AppImage、Wget、Curl等。想了解更多linux常见下载安装工具相关内容,可以阅读本专题下面的文章。

855

2023.10.30

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

4378

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

1209

2025.12.24

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn