ホームページ >バックエンド開発 >PHPチュートリアル >PHP CURL メモリ リーク問題の解決策_PHP チュートリアル
この記事では、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
www.bkjia.com