これは、ネットワークリクエストにPHPでCurl(クライアントURLライブラリ)を使用する一般的な方法です。 PageコンテンツをクロールするためのGETリクエストを送信するか、POSTリクエストを介してデータを送信するかどうかにかかわらず、Curlはリッチで柔軟な機能インターフェイスを提供します。これらの機能を使用する場合、接続リソースをタイムリーに閉じてクリーンアップすることが、プログラムのパフォーマンスと安定性を確保するための重要なリンクです。この記事では、リクエストが完了した後にcurl_close関数を使用して、ハンドルを正しく閉じ、リソースを解放する方法に焦点を当てます。
Curlは、HTTP、HTTP、FTP、およびその他のプロトコルのPHPスクリプトでサーバーと対話するための強力なツールです。 Curlセッションを初期化し、さまざまなオプションの設定、リクエストの実行、返品結果の取得により、開発者はさまざまな複雑なネットワーク通信操作を実装できます。
Curl_initを介して作成された各Curlハンドルには、特定のシステムリソースが割り当てられます。リクエストが完了した後、 Curl_Closeがこのハンドルを閉じるために呼び出されない場合、これらのリソースはリリースされず、メモリリークまたは接続プールの枯渇を引き起こします。
並行性の高いシナリオでは、この問題はさらに深刻であり、サービスのクラッシュにつながる可能性があります。したがって、リクエストが成功するか失敗したかにかかわらず、完了後にcurl_closeを呼び出して、ハンドルを破壊し、リソースを解放してください。
Curl_Closeを正しく使用する方法を示す典型的なCurl要求プロセスは次のとおりです。
<?php
// 初期化 cURL セッション
$ch = curl_init();
// ターゲットの設定 URL
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/data");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// リクエストを実行します
$response = curl_exec($ch);
// リクエストが間違っているかどうかを確認してください
if (curl_errno($ch)) {
echo 'リクエストエラー: ' . curl_error($ch);
} else {
echo '応答コンテンツ: ' . $response;
}
// 閉鎖セッション并释放资源
curl_close($ch);
?>
上記の例では、 curl_close($ ch)は要求プロセス全体の最後のステップであり、プログラムが不要な接続を保持しないようにします。
最新のPHP-CURLは、特にcurl_multiインターフェイスまたはHTTP/2マルチプレックスが有効になっているシナリオで、接続の再利用をサポートしています。たとえば、永続的な接続オプションを有効にする場合:
curl_setopt($ch, CURLOPT_FORBID_REUSE, false);
この時点で、接続は接続プールに配置され、再利用を待つことができます。ただし、接続プールの管理はハンドルの管理と同じではないことに注意してください。基礎となる接続が再利用されたとしても、 Curl_Closeは依然として実行する必要がある操作であり、ユーザースペースのハンドルに関連するデータ構造を破壊する責任があります。
curl_multi_initマルチハンドルコンカレントリクエストメソッドを使用している場合は、操作が完了した後、すべてのハンドルを順番に閉じる必要もあります。
$mh = curl_multi_init();
$ch1 = curl_init("https://gitbox.net/api/one");
$ch2 = curl_init("https://gitbox.net/api/two");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
// 同時リクエストを実行します
do {
$status = curl_multi_exec($mh, $active);
curl_multi_select($mh);
} while ($active && $status == CURLM_OK);
// 結果を取得します
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);
// ハンドルを取り外して閉じます
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_close($ch1);
curl_close($ch2);
// 閉鎖 multi ハンドル
curl_multi_close($mh);
ここでは特に強調されています。ハンドルを削除する前にすべての操作が完了していることを確認してください。
Curlを使用する場合、 curl_closeを時間内に呼び出してリソースをリリースすることは、堅牢なPHPアプリケーションを作成するための基本的な要件です。 PHPおよびオペレーティングシステムの最新のバージョンは、プロセスの終了時にリソースを自動的にリサイクルできますが、システムのリサイクルに依存することは安全ではありません。積極的にリソースを閉鎖すると、プログラムの安定性を改善するだけでなく、問題を見つけてパフォーマンスを最適化するのにも役立ちます。
高周波リクエスト、タスクの同時実行、および外部APIの呼び出しの場合、開発者は標準プロセスへの未成年のステップとしてcurl_closeを含める必要があります。
優れたリソース管理習慣により、多くの隠れた問題を回避し、PHPアプリケーションをより堅牢で効率的にすることができます。