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

 更新时间:2015年02月12日 11:35:19   投稿:junjie  
这篇文章主要介绍了PHP CURL 内存泄露问题解决方法,CRUL长时间访问HTTPS网站时有内存泄露问题,本文经过反复调试找到了解决方法,需要的朋友可以参考下

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

相关文章

  • laravel withCount 统计关联数量的方法

    laravel withCount 统计关联数量的方法

    今天小编就为大家分享一篇laravel withCount 统计关联数量的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • php文件上传的例子及参数详解

    php文件上传的例子及参数详解

    这篇文章主要介绍了php文件上传的例子及参数,有需要的朋友可以参考一下
    2013-12-12
  • PHP解决高并发的优化方案实例

    PHP解决高并发的优化方案实例

    这篇文章主要介绍了PHP解决高并发的优化方案实例,介绍的非常详细,对这块不太明白的小伙伴可以跟随小编一起来探讨研究吧!
    2020-12-12
  • PHP 5.6.11中CURL模块问题的解决方法

    PHP 5.6.11中CURL模块问题的解决方法

    这篇文章主要介绍了PHP 5.6.11中CURL模块问题的解决方法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-08-08
  • stripos函数知识点实例分享

    stripos函数知识点实例分享

    在本篇内容中我们给大家分享了关于stripos函数知识点实例内容,有需要的朋友们跟着学习下。
    2019-02-02
  • 在IIS7.0下面配置PHP 5.3.2运行环境的方法

    在IIS7.0下面配置PHP 5.3.2运行环境的方法

    最近心血来潮,想学习一下php,既然想学习了就得需要搭环境。在网上找来找去都是说IIS5.0或者6.0的配置。真是看得云里雾里的,这样直接影响了我的判断力。现特意写下来在IIS7.0下面如何进行配置PHP。
    2010-04-04
  • PHP执行linux命令常用函数汇总

    PHP执行linux命令常用函数汇总

    一般情况下,很少会用php去执行linux命令,不过特殊情况下,你也许会用到这些函数。以前我知道有二个函数可以执行linux命令,一个是exec,一个是shell_exec,通过本文给大家介绍PHP执行linux命令常用函数汇总,需要的朋友参考下
    2016-02-02
  • 初识Laravel

    初识Laravel

    最近因为项目问题,接触到了Laravel框架,说说自己的使用感受吧。
    2014-10-10
  • tp5.1 框架查询表达式用法详解

    tp5.1 框架查询表达式用法详解

    这篇文章主要介绍了tp5.1 框架查询表达式用法,结合实例形式详细分析了tp5.1 框架常用查询表达式功能、定义、用法及操作注意事项,需要的朋友可以参考下
    2020-05-05
  • php 判断IP为有效IP地址的方法

    php 判断IP为有效IP地址的方法

    这篇文章主要介绍了php 判断IP为有效IP地址的方法,需要的朋友可以参考下
    2018-01-01

最新评论