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反射使用实例和PHP反射API的中文说明
Jul 02 PHP
php实现的替换敏感字符串类实例
Sep 22 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
Aug 25 PHP
Thinkphp无限级分类代码
Nov 11 PHP
phpmailer简单发送邮件的方法(附phpmailer源码下载)
Jun 13 PHP
PHP使用数组实现矩阵数学运算的方法示例
May 29 PHP
Windows平台实现PHP连接SQL Server2008的方法
Jul 26 PHP
Yii2.0多文件上传实例说明
Jul 24 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
PHP数组常用函数实例小结
Aug 20 PHP
php+js实现的无刷新下载文件功能示例
Aug 23 PHP
laravel admin实现分类树/模型树的示例代码
Jun 10 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 网页过期时间的控制代码
2009/06/29 PHP
10个实用的PHP代码片段
2011/09/02 PHP
PHP fgetcsv 定义和用法(附windows与linux下兼容问题)
2012/05/29 PHP
PHP页面跳转实现延时跳转的方法
2016/12/10 PHP
Yii框架模拟组件调用注入示例
2019/11/11 PHP
PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】
2020/05/29 PHP
用javascript做拖动布局的思路
2008/05/31 Javascript
让你的博文自动带上缩址的实现代码,方便发到微博客上
2010/12/28 Javascript
查找iframe里元素的方法可传参
2013/09/11 Javascript
javascript操纵OGNL标签示例代码
2014/06/16 Javascript
JavaScript按值删除数组元素的方法
2015/04/24 Javascript
jQuery实现查找链接文字替换属性的方法
2016/06/27 Javascript
javascript  数组排序与对象排序的实例
2017/07/17 Javascript
nodejs中Express与Koa2对比分析
2018/02/06 NodeJs
Vue起步(无cli)的啊教程详解
2019/04/11 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
2019/09/04 Javascript
使用Python的web.py框架实现类似Django的ORM查询的教程
2015/05/02 Python
Python中%r和%s的详解及区别
2017/03/16 Python
浅谈django开发者模式中的autoreload是如何实现的
2017/08/18 Python
python实现flappy bird小游戏
2018/12/24 Python
django 使用全局搜索功能的实例详解
2019/07/18 Python
python 使用事件对象asyncio.Event来同步协程的操作
2020/05/04 Python
详解如何在PyCharm控制台中输出彩色文字和背景
2020/08/17 Python
python遍历路径破解表单的示例
2020/11/21 Python
CSS3 制作绽放的莲花采用效果叠加实现
2013/01/31 HTML / CSS
个人自我评价范文
2014/02/05 职场文书
护士自我鉴定怎么写
2014/02/07 职场文书
餐饮收银员岗位职责
2014/02/07 职场文书
爱与责任演讲稿
2014/05/20 职场文书
新教师岗前培训方案
2014/06/05 职场文书
社会学专业求职信
2014/07/17 职场文书
前台接待岗位职责
2015/02/03 职场文书
spring cloud 配置中心客户端启动遇到的问题
2021/09/25 Java/Android
mysql中int(3)和int(10)的数值范围是否相同
2021/10/16 MySQL
Python Django项目和应用的创建详解
2021/11/27 Python
Java 轮询锁使用时遇到问题
2022/05/11 Java/Android