短链接还原内存溢出主因是未优化cURL配置;应设CURLOPT_NOBODY=true、CURLOPT_MAXREDIRS=10,并调高memory_limit至512M,优先用ini_set()或php.ini修改。
Allowed memory size exhausted
短链接还原本质是多次 HTTP 重定向追踪(比如从 https://t.co/abc → https://bit.ly/xyz → 最终目标 URL),PHP 默认用 curl 或 file_get_contents 实现时,若中间跳转多、响应体大、或开启了冗余的 CURLOPT_HEADER 或 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true) 但未限制跳转次数,就容易吃光默认内存(通常 128M 或更少)。
memory_limit 设置位置不生效?优先级和写法要对PHP 内存限制受多个配置层级影响,顺序为:ini_set() > .htaccess(仅 Apache + mod_php)> php.ini > user.ini(PHP-FPM 环境常用)。直接改 php.ini 最稳妥,但线上环境常受限;用 ini_set('memory_limit', '512M') 必须放在脚本最开头,且不能高于 php.ini 中 memory_limit 的硬上限(如 ini 中设为 128M,ini_set 设 512M 也无效)。
echo ini_get('memory
_limit');ini_set('memory_limit', '512M');php.ini,改行 memory_limit = 512M,然后重启 PHP 服务(systemctl restart php-fpm 或 service apache2 restart)短链接还原真正需要的只是最终的 Location 响应头,不是完整页面内容。用 HEAD 方法 + 关闭 body 缓存,可大幅降低内存占用:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $short_url); curl_setopt($ch, CURLOPT_NOBODY, true); // 只取 header curl_setopt($ch, CURLOPT_HEADER, false); // 不返回 header 到输出 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 捕获结果 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 允许跳转 curl_setopt($ch, CURLOPT_MAXREDIRS, 10); // 强制限制最多 10 次跳转 curl_setopt($ch, CURLOPT_TIMEOUT, 10); // 防卡死 $resp = curl_exec($ch); $redirect_url = curl_getinfo($ch, CURLINFO_REDIRECT_URL); curl_close($ch);
注意:CURLINFO_REDIRECT_URL 返回的是最后一次跳转后的 URL(即最终目标),前提是所有跳转都用了 301/302 和标准 Location 头;如果某次跳转是 JS 跳转或 meta refresh,这个方法会失效——那就得换 DOM 解析,但那是另一类内存问题了。
curl_share_init() 不适用短链还原有人查文档看到 curl_share_init() 可复用连接、省资源,但短链接还原是串行跳转(A→B→C),每次请求 URL 不同,无法共享 cookie 或 DNS 缓存,强行套用反而增加逻辑复杂度。真实瓶颈在单次响应体大小和跳转深度,不是连接初始化开销。
别迷信“高级 API”,先确认是不是真需要——90% 的短链还原场景,调对 CURLOPT_NOBODY 和 CURLOPT_MAXREDIRS 就够了。内存不够,往往是因为把整个跳转链的 HTML 全读进内存再正则提取 Location,而不是让 cURL 自己处理重定向。
# php
# html
# js
# apache
# cookie
# access
# curl
# dns
# 内存占用
# red
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
Win11局域网共享怎么设置 Win11文件夹网络共享教程【详解】
如何在 PHP 单元测试中正确模拟带方法的图像处理门面(Facade)
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
c# await 一个已经完成的Task会发生什么
Win11怎么更改默认打开方式_Win11关联文件格式教程【详解】
c++如何使用std::bitset进行位图算法_c++ 快速查找与大规模数据排重【方法】
Win11怎么关闭搜索历史_Win11清除任务栏搜索记录【隐私】
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
如何用正则与预处理高效拦截带干扰符的恶意域名
MAC如何启用访达侧边栏显示_MAC Finder偏好设置与常用目录添加【教程】
如何使用正则表达式精确匹配最多含一个换行符的 start-end 区段
mac怎么安装adb_MAC配置Android ADB开发环境【详解】
PHP中require语句后直接调用返回对象方法的语法解析
如何使用Golang操作指针变量_Golang解引用与赋值实践
Drupal 中 HTML 链接被重复转义导致渲染异常的解决方案
Windows蓝屏错误0x00000023怎么修复_FAT文件系统错误处理
c++中的可变参数模板(variadic templates)怎么用_c++模板编程黑魔法【C++11】
PHP主流架构怎么处理表单验证_规则与自定义【技巧】
Mac上的iMovie如何剪辑视频?(新手入门教程)
Python数据挖掘核心算法实践_聚类分类与特征工程
php订单日志怎么在swoole写_php协程swoole写订单日志教程【教程】
Windows怎样关闭Edge新标签页广告_Windows关闭Edge新标签页设置【步骤】
Win10如何更改网络连接_Windows10以太网属性IP配置
Windows蓝屏BAD_POOL_HEADER故障详解_蓝屏池损坏错误修复指南
Win11怎么设置麦克风权限_允许应用访问Win11麦克风【详解】
如何在Golang中操作嵌套切片指针_Golang多维slice修改
Win11如何更改任务栏颜色 Win11自定义任务栏背景色【美化】
php嵌入式多设备通信怎么实现_php同时管理多个串口设备【操作】
Win11怎么关闭触控板_Win11笔记本禁用触摸板快捷键
php能跑在stm32上吗_php在stm32微控制器上的移植方法【介绍】
Win11怎么设置按流量计费_Win11限制后台流量消耗【网络】
windows系统找不到无线网络怎么办_windows WLAN适配器故障排查
作用域操作符会影响性能吗_php静态调用性能分析【教程】
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
Windows10系统怎么查看系统版本_Win10运行winver命令查询
Mac怎么查看活动监视器_理解Mac进程和资源占用【指南】
如何使用Golang管理模块版本_Golanggo mod tidy与升级方法
Win11怎么关闭边缘滑动手势_Windows11禁用触摸屏边缘操作
Win11怎么开启游戏工具栏_Windows11 Xbox Game Bar快捷键
Windows如何拦截腾讯视频广告_Windows拦截腾讯视频广告方法【方法】
Python抽象类与接口设计_规范说明【指导】
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
php8.4xdebug无法调试怎么办_php8.4xdebug配置问题解决【解答】
如何使用Golang recover捕获panic_防止程序崩溃并处理异常
Win11任务栏颜色怎么改_Win11自定义任务栏配色设置【美化】
Ajax提交表单PHP怎么接收_处理Ajax发送的表单数据技巧【指南】
小程序里php怎么变mp4_小程序调用php生成mp4视频方法【教程】
php错误怎么开启_display_errors与log_errors的设置【汇总】
MAC怎么使用表情符号面板_MAC Emoji快捷键调用与符号查找【方法】
Win11怎么关闭小组件_Win11禁用任务栏天气与小组件方法【设置】
2026-01-01
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。