ホームページ  >  記事  >  バックエンド開発  >  PHP CURL メモリ リーク問題の解決策_PHP チュートリアル

PHP CURL メモリ リーク問題の解決策_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:06:53772ブラウズ

PHP CURL メモリ リーク問題の解決策

この記事では、HTTPS ウェブサイトに長時間アクセスするとメモリ リークの問題が発生する PHP CURL 問題の解決策を主に紹介します。参考にしてみてください

phpcurl は、privoxy プロキシを使用して https://www.google.com/search?q=xxx にアクセスします

curl の設定に問題はありません。長時間実行した結果、メモリ リークが発生しました。curl が https サイトにアクセスすると、バグが発生します。

メモリリークはLinuxのtopコマンドで発見できますが、PHPの関数memory_get_usage()では発見できません。

デバッグを繰り返した結果、問題を解決するために次の項目がcurl設定に追加されました。

コードは次のとおりです:

[CURLOPT_HTTPPROXYTUNNEL] = true;

[CURLOPT_SSL_VERIFYPEER] = false;

[CURLOPT_SSL_VERIFYHOST] = false;

CURLOPT_HTTPPROXYTUNNEL の具体的な手順は stackoverflow で入手できます。元のテキストを直接投稿してください:

CURLOPT_HTTPPROXYTUNNEL なし

CURLOPT_HTTPPROXYTUNNEL を使用しない場合: プロキシ アドレス/ポートを HTTP リクエストの宛先として使用するだけで、プロキシはクエリの HTTP ヘッダーを読み取り、リクエストを (HTTP ヘッダーとともに) 宛先に転送し、応答を書き込みます。 .

手順例:

1)HTTP GET /index.htmlを1.1.1.1(プロキシ)に送信

2)1.1.1.1 リクエストを受信し、HTTP リクエストの最終宛先を取得するためにヘッダーを解析します。

3)1.1.1.1 クエリとヘッダーを www.site.com (リクエストヘッダーの宛先) に転送します。

4)1.1.1.1 www.site.comから受け取った返答を返信します

CURLOPT_HTTPPROXYTUNNELを使用する場合

CURLOPT_HTTPPROXYTUNNEL の場合: CONNECT HTTP リクエストを実行して、宛先へのダイレクト バイナリ接続 (TCP トンネルと呼ばれる HTTPS など) を直接開くようにプロキシに要求します。トンネルが正常であれば、プロキシは HTTP/1.1 200 を返します。接続が確立されました。受信すると、ブラウザは宛先を直接クエリし始めます。プロキシは HTTP ヘッダーを解析せず、理論的にはトンネル データを読み取らず、ただ転送するだけです。そのため、これがトンネルと呼ばれます。

手順例:

1)HTTP CONNECTが1.1.1.1に送信されました

2)1.1.1.1 HTTP CONNECTを受信し、最終宛先のIP/ポート(HTTP CONNECTのヘッダーフィールド)を取得します。

3)1.1.1.1 宛先 2.22.63.73:80 (www.site.com の ip/port) への TCP ハンドシェイクを実行して、TCP ソケットを開きます。

4)1.1.1.1 TCP ソケットを 2.22.63.73:80 に開かれた TCP ソケットにパイプしてトンネルを作成し、その後返信します HTTP/1.1 200 接続が確立されたということは、クライアントがクエリに TCP トンネルをスローさせることができることを意味します (受信した TCP データはサーバーに直接送信され、その逆も同様です)。

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

http://www.bkjia.com/PHPjc/957535.html

www.bkjia.com

http://www.bkjia.com/PHPjc/957535.html技術記事この記事では、PHP CURL のメモリ リーク問題の解決策を主に紹介します。CRUL では、HTTPS ウェブサイトに長時間アクセスするとメモリ リークの問題が発生します。この記事は調整を繰り返しました。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。