PHP CURL 内存泄露问题解决方法


Posted in PHP onFebruary 12, 2015

phpcurl使用privoxy代理访问https://www.google.com/search?q=xxx

curl配置平淡无奇,长时间运行发现一个严重问题,内存泄露!不论用单线程和多线程都无法避免!是curl访问https站点的时候有bug!
内存泄露可以通过linux的top命令发现,使用php函数memory_get_usage()不会发现。

经过反复调试找到解决办法,curl配置添加如下几项解决问题:

[CURLOPT_HTTPPROXYTUNNEL] = true;

[CURLOPT_SSL_VERIFYPEER] = false;

[CURLOPT_SSL_VERIFYHOST] = false;

CURLOPT_HTTPPROXYTUNNEL具体说明stackoverflow上有,直接贴原文:

Without CURLOPT_HTTPPROXYTUNNEL

Without CURLOPT_HTTPPROXYTUNNEL : You just use the proxy address/port as a destination of your HTTP request. The proxy will read the HTTP headers of your query, forward your request to the destination (with your HTTP headers) and then write the response to you.

Example steps :

1)HTTP GET /index.html sent to 1.1.1.1 (proxy)
2)1.1.1.1 receive request and parse header for getting the final destination of your HTTP request.
3)1.1.1.1 forward your query and headers to www.site.com (destination in request headers).
4)1.1.1.1 write back to you the response receive from www.site.com

With CURLOPT_HTTPPROXYTUNNEL

With CURLOPT_HTTPPROXYTUNNEL : You ask the proxy to open a direct binary connection (like HTTPS, called a TCP Tunnel) directly to your destination by doing a CONNECT HTTP request. When the tunnel is ok, the proxy write you back a HTTP/1.1 200 Connection established. When it received your browser start to query the destination directly : The proxy does not parse HTTP headers and theoretically does not read tunnel datas, it just forward it, thats why it is called a tunnel !

Example steps :

1)HTTP CONNECT sent to 1.1.1.1
2)1.1.1.1 receive HTTP CONNECT and get the ip/port of your final destination (header field of HTTP CONNECT).
3)1.1.1.1 open a TCP Socket by doing a TCP handshake to your destination 2.22.63.73:80 (ip/port of www.site.com).
4)1.1.1.1 Make a tunnel by piping your TCP Socket to the TCP Socket opened to 2.22.63.73:80and then write you back HTTP/1.1 200 Connection established witch means that your client can now make your query throw the TCP Tunnel (TCP datas received will be transmited directly to server and vice versa).

http://stackoverflow.com/questions/12288956/what-is-the-curl-option-curlopt-httpproxytunnel-means

PHP 相关文章推荐
解析php中获取url与物理路径的总结
Jun 21 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
Jan 26 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
May 04 PHP
php发送get、post请求的6种方法简明总结
Jul 08 PHP
php序列化函数serialize() 和 unserialize() 与原生函数对比
May 08 PHP
在PHP程序中使用Rust扩展的方法
Jul 03 PHP
php+curl 发送图片处理代码分享
Jul 09 PHP
smarty中常用方法实例总结
Aug 07 PHP
PHP7正式版测试,性能惊艳!
Dec 08 PHP
使用 laravel sms 构建短信验证码发送校验功能
Nov 06 PHP
php实现的rc4加密解密类定义与用法示例
Aug 16 PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
Oct 15 PHP
PHP中捕获超时事件的方法实例
Feb 12 #PHP
php单例模式示例分享
Feb 12 #PHP
PHP 正则表达式小结
Feb 12 #PHP
一个非常完美的读写ini格式的PHP配置类分享
Feb 12 #PHP
PHP动态输出JavaScript代码实例
Feb 12 #PHP
PHP使用JSON和将json还原成数组
Feb 12 #PHP
服务器上配置PHP运行环境教程
Feb 12 #PHP
You might like
windows下zendframework项目环境搭建(通过命令行配置)
2012/12/06 PHP
php实现读取内存顺序号
2015/03/29 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
2015/09/29 PHP
php好代码风格的阶段性总结
2016/06/25 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
PHP中检查isset()和!empty()函数的必要性
2019/02/13 PHP
JavaScript Sort 表格排序
2009/10/31 Javascript
jquery实现的树形目录实例
2015/06/26 Javascript
多功能jQuery树插件zTree实现权限列表简单实例
2016/07/12 Javascript
Angular开发者指南之入门介绍
2017/03/05 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
vue-awesome-swiper滑块插件使用方法详解
2017/11/27 Javascript
SVG实现时钟效果
2018/07/17 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
2019/02/13 Javascript
Vue 一键清空表单的实现方法
2020/02/07 Javascript
用webAPI实现图片放大镜效果
2020/11/23 Javascript
[01:39]2014DOTA2国际邀请赛 Newbee经理CU专访队伍火力全开
2014/07/15 DOTA
浅谈Python中数据解析
2015/05/05 Python
Python字符串格式化
2015/06/15 Python
Python中表示字符串的三种方法
2017/09/06 Python
python将文本分每两行一组并保存到文件
2018/03/19 Python
python实现飞机大战微信小游戏
2020/03/21 Python
python实现两个经纬度点之间的距离和方位角的方法
2019/07/05 Python
python logging设置level失败的解决方法
2020/02/19 Python
Python闭包及装饰器运行原理解析
2020/06/17 Python
python爬虫scrapy图书分类实例讲解
2020/11/23 Python
CSS3动画之流彩文字效果+图片模糊效果+边框伸展效果实现代码合集
2017/08/18 HTML / CSS
html5 初试 indexedDB(推荐)
2016/07/21 HTML / CSS
大二法学专业职业生涯规划范文
2014/02/12 职场文书
道路建设实施方案
2014/03/18 职场文书
企业安全生产责任书
2014/04/14 职场文书
理发店策划方案
2014/06/05 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书
Spring Data JPA使用JPQL与原生SQL进行查询的操作
2021/06/15 Java/Android
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang
MySQL事务的隔离级别详情
2022/07/15 MySQL