Home >Backend Development >PHP Tutorial >PHP CURL memory leak problem solution_PHP tutorial

PHP CURL memory leak problem solution_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:06:53867browse

Solution to PHP CURL memory leak problem

This article mainly introduces the solution to PHP CURL memory leak problem. CRUL has memory leak problem when accessing HTTPS websites for a long time. This article has been After repeated debugging, I found a solution. Friends in need can refer to it

phpcurl uses privoxy proxy to access https://www.google.com/search?q=xxx

The curl configuration is unremarkable, and a serious problem is found after a long time running, memory leak! It cannot be avoided whether using single thread or multi-thread! There is a bug when curl accesses https sites!

Memory leaks can be discovered through the Linux top command, but not through the PHP function memory_get_usage().

After repeated debugging, a solution was found. The following items were added to the curl configuration to solve the problem:

The code is as follows:

 [CURLOPT_HTTPPROXYTUNNEL] = true;

 [CURLOPT_SSL_VERIFYPEER] = false;

 [CURLOPT_SSL_VERIFYHOST] = false;

CURLOPT_HTTPPROXYTUNNEL has specific instructions on stackoverflow. Post the original text directly:

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 received 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 transmitted directly to server and vice versa).

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

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/957535.htmlTechArticlePHP CURL memory leak problem solution This article mainly introduces the PHP CURL memory leak problem solution, CRUL takes a long time There is a memory leak problem when accessing HTTPS websites. This article has been adjusted repeatedly...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn