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 字符串函数收集
Mar 29 PHP
PHP压缩html网页代码(清除空格,换行符,制表符,注释标记)
Apr 02 PHP
PHP静态调用非静态方法的应用分析
May 02 PHP
深入解析php之apc
May 15 PHP
单台服务器的PHP进程之间实现共享内存的方法
Jun 13 PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
Dec 25 PHP
为PHP5.4开启Zend OPCode缓存
Dec 26 PHP
PHP获取数组最后一个值的2种方法
Jan 21 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
Sep 30 PHP
PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
May 17 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 26 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
PHP结合Jquery和ajax实现瀑布流特效
2016/01/07 PHP
php车辆违章查询数据示例
2016/10/14 PHP
JS日历 推荐
2006/12/03 Javascript
JavaScript入门教程(1) 什么是JS
2009/01/31 Javascript
利用JQuery+EasyDrag 实现弹出可拖动的Div,同时向Div传值,然后返回Div选中的值
2009/10/24 Javascript
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
JavaScript地理位置信息API
2016/06/11 Javascript
Canvas实现动态的雪花效果
2017/02/13 Javascript
详解Vue中添加过渡效果
2017/03/20 Javascript
Vue生命周期示例详解
2017/04/12 Javascript
Angular 4.X开发实践中的踩坑小结
2017/07/04 Javascript
vue中如何创建多个ueditor实例教程
2017/11/14 Javascript
Vue通过ref父子组件拿值方法
2018/09/12 Javascript
vue实现滑动切换效果(仅在手机模式下可用)
2020/06/29 Javascript
手把手15分钟搭一个企业级脚手架
2019/09/16 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
2019/11/25 Javascript
js利用拖放实现添加删除
2020/08/27 Javascript
Python中类的继承代码实例
2014/10/28 Python
python生成随机密码或随机字符串的方法
2015/07/03 Python
Python实现身份证号码解析
2015/09/01 Python
横向对比分析Python解析XML的四种方式
2016/03/30 Python
Python使用gensim计算文档相似性
2016/04/10 Python
详解python中的模块及包导入
2019/08/30 Python
Python os模块常用方法和属性总结
2020/02/20 Python
基于python 取余问题(%)详解
2020/06/03 Python
python实现简单的tcp 文件下载
2020/09/16 Python
python 实现弹球游戏的示例代码
2020/11/17 Python
HTML5 audio标签使用js进行播放控制实例
2015/04/24 HTML / CSS
HTML块级标签汇总(小篇)
2016/07/13 HTML / CSS
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
技校生自我鉴定
2013/12/08 职场文书
2015年事业单位工作总结
2015/04/27 职场文书
运动会广播稿20字
2015/08/19 职场文书
详解CocosCreator消息分发机制
2021/04/16 Javascript
Go 语言结构实例分析
2021/07/04 Golang
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android