短链接还原php提示内存不足_调整PHP内存限制设置【技巧】
技术百科
絕刀狂花
发布时间:2026-01-01
浏览: 次 短链接还原内存溢出主因是未优化cURL配置;应设CURLOPT_NOBODY=true、CURLOPT_MAXREDIRS=10,并调高memory_limit至512M,优先用ini_set()或php.ini修改。
短链接还原时 PHP 报 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)
更轻量的还原方式:禁用 body、限制跳转、用 HEAD 请求
短链接还原真正需要的只是最终的 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 解析,但那是另一类内存问题了。
PHP 8.0+ 的 curl_share_init() 不适用短链还原
有人查文档看到 curl_share_init() 可复用连接、省资源,但短链接还原是串行跳转(A→B→C),每次请求 URL 不同,无法共享 cookie 或 DNS 缓存,强行套用反而增加逻辑复杂度。真实瓶颈在单次响应体大小和跳转深度,不是连接初始化开销。
别迷信“高级 API”,先确认是不是真需要——90% 的短链还原场景,调对 CURLOPT_NOBODY 和 CURLOPT_MAXREDIRS 就够了。内存不够,往往是因为把整个跳转链的 HTML 全读进内存再正则提取 Location,而不是让 cURL 自己处理重定向。
# js
# curl
# dns
# html
# 内存占用
# access
# red
# php
# apache
# cookie
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Python网络日志追踪_请求定位解析【教程】
- Win11怎么关闭自动调节亮度 Win11禁用内容
- 如何使用Golang实现基本类型比较_Golang
- 如何使用Golang搭建本地API测试环境_快速验
- 如何在Golang中验证模块完整性_Golangg
- Win11怎样安装剪映专业版_Win11安装剪映教
- Win11怎么更改账户头像_Windows 11自
- php485能和物联网模块通信吗_php485对接
- win11 OneDrive怎么彻底关闭 Win1
- php条件判断怎么写_ifelse和switchc
- 如何使用Golang优化模块引入路径_Golang
- c++的位运算怎么用 与、或、异或、移位操作详解【
- Win10如何卸载自带Edge_Win10彻底卸载
- php下载安装后swoole扩展怎么安装_异步框架
- c++如何用AFL++进行模糊测试 c++ Fuz
- Windows10电脑怎么连接蓝牙设备_Win10
- php转exe用什么工具打包快_高效打包软件推荐【
- Python函数接口稳定性_版本演进解析【指导】
- c# Task.ConfigureAwait(tr
- php错误怎么开启_display_errors与
- 如何使用Golang构建简易投票统计功能_Gola
- 如何优化Golang内存分配与GC调度_Golan
- Linux怎么设置磁盘配额_Linux系统Quot
- Windows10系统怎么查看CPU核心数_Win
- Win10如何备份注册表_Win10注册表备份步骤
- Win11怎么设置鼠标宏_Win11鼠标按键自定义
- php能跑在stm32上吗_php在stm32微控
- Mac如何修改Hosts文件?(本地开发与屏蔽网站
- Win11怎么卸载Photos应用_Win11卸载
- c++中如何进行二进制文件读写_c++ read与
- LINUX如何开放防火墙端口_Linux fire
- php中常量能用::访问吗_类常量与作用域操作符使
- 如何在 Go 应用中实现自动错误恢复与进程重启机制
- php本地部署后session无法保存_sessi
- 如何在Golang中处理数据库事务错误_回滚和日志
- php8.4如何实现队列任务_php8.4redi
- Win11如何连接Xbox手柄 Win11蓝牙连接
- Win10怎么限制单程序CPU占用上限_Win10
- Win11怎么看电池循环次数_Win11笔记本电池
- Win11麦克风没声音怎么设置_Win11麦克风权
- Win10怎么查看内存时序参数_Win10CPU-
- Win11如何设置ipv6 Win11开启IPv6
- Win11怎么关闭定位服务_保护Win11位置隐私
- Mac怎么安装软件_Mac安装dmg与pkg文件的
- Win11怎么查看显卡显存_查询Win11显卡详细
- 如何提升Golang程序I/O性能_Golang
- VSC怎样在Linux运行PHP_Ubuntu系统
- Python生成器表达式内存优化_惰性计算说明【指
- 如何在Golang中优化文件读写性能_使用缓冲和并
- php修改数据怎么改富文本_update更新htm

QQ客服