PHP CURL 內(nèi)存泄露問(wèn)題解決方法
phpcurl使用privoxy代理訪問(wèn)https://www.google.com/search?q=xxx
curl配置平淡無(wú)奇,長(zhǎng)時(shí)間運(yùn)行發(fā)現(xiàn)一個(gè)嚴(yán)重問(wèn)題,內(nèi)存泄露!不論用單線程和多線程都無(wú)法避免!是curl訪問(wèn)https站點(diǎn)的時(shí)候有bug!
內(nèi)存泄露可以通過(guò)linux的top命令發(fā)現(xiàn),使用php函數(shù)memory_get_usage()不會(huì)發(fā)現(xiàn)。
經(jīng)過(guò)反復(fù)調(diào)試找到解決辦法,curl配置添加如下幾項(xiàng)解決問(wèn)題:
[CURLOPT_HTTPPROXYTUNNEL] = true;
[CURLOPT_SSL_VERIFYPEER] = false;
[CURLOPT_SSL_VERIFYHOST] = false;
CURLOPT_HTTPPROXYTUNNEL具體說(shuō)明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使用CURL_MULTI實(shí)現(xiàn)多線程采集的例子
- 解析php中curl_multi的應(yīng)用
- php中的curl_multi系列函數(shù)使用例子
- PHP使用curl_multi實(shí)現(xiàn)并發(fā)請(qǐng)求的方法示例
- php curl post 時(shí)出現(xiàn)的問(wèn)題解決
- 關(guān)于PHP的curl開啟問(wèn)題探討
- php使用curl詳細(xì)解析及問(wèn)題匯總
- php5.2的curl-bug 服務(wù)器被php進(jìn)程卡死問(wèn)題排查
- php中curl和soap方式請(qǐng)求服務(wù)超時(shí)問(wèn)題的解決
- PHP使用curl_multi_select解決curl_multi網(wǎng)頁(yè)假死問(wèn)題的方法
相關(guān)文章
ThinkPHP水印功能實(shí)現(xiàn)修復(fù)PNG透明水印并增加JPEG圖片質(zhì)量可調(diào)整
這篇文章主要介紹了ThinkPHP水印功能實(shí)現(xiàn)修復(fù)PNG透明水印并增加JPEG圖片質(zhì)量可調(diào)整,包含了對(duì)多層水印設(shè)置代碼的修改,修改的部分在注釋里有較為詳細(xì)的說(shuō)明,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-11-11php中關(guān)于socket的系列函數(shù)總結(jié)
這篇文章主要介紹了php中關(guān)于socket的系列函數(shù)總結(jié),本文列舉了所有關(guān)于PHP語(yǔ)言中使用socket相關(guān)服務(wù)的一些函數(shù),需要的朋友可以參考下2015-05-05PHP實(shí)現(xiàn)的帶超時(shí)功能get_headers函數(shù)
這篇文章主要介紹了PHP實(shí)現(xiàn)的帶超時(shí)功能的get_headers函數(shù),本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-02-02Thinkphp5.0 框架使用模型Model添加、更新、刪除數(shù)據(jù)操作詳解
這篇文章主要介紹了Thinkphp5.0 框架使用模型Model添加、更新、刪除數(shù)據(jù)操作,結(jié)合實(shí)例形式詳細(xì)分析了thinkPHP5.0框架Model模型操作數(shù)據(jù)的添加、更新、刪除的各種常用技巧與操作注意事項(xiàng),需要的朋友可以參考下2019-10-10

簡(jiǎn)單談?wù)凱HP面向?qū)ο笾畼?biāo)識(shí)對(duì)象