PHP에서 Curl은 Curl_Init 함수를 통해 리소스를 생성하여 진행중인 HTTP 요청을 나타냅니다. URL, 요청 메소드, 요청 헤더 등과 같은 요청 매개 변수를 설정 한 다음 Curl_Exec을 사용하여 요청을 보내고 응답을 얻을 수 있습니다. 각 컬 세션에는 리소스 핸들이 할당됩니다. 이 핸들은 요청이 완료된 후 명시 적으로 닫아야합니다. 그렇지 않으면 시스템 리소스를 점유하고 메모리 누출로 이어질 수 있습니다.
$ch = curl_init('https://gitbox.net/some-api');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
CURL_CLOSE 기능은 CURL 세션을 닫고 해당 세션과 관련된 모든 리소스를 자유롭게하는 데 사용됩니다. Curl_Exec이 요청을 완료 한 후에는 자원이 즉시 닫아야합니다. Curl_Close가 호출되지 않으면 PHP는 CURL 세션 리소스, 폐기물 메모리를 유지하고 시스템 성능 저하로 이어질 수 있습니다.
// 잘못된 방법:닫히지 않습니다 cURL 의지
$ch = curl_init('https://gitbox.net/some-api');
$response = curl_exec($ch);
// 전화가 없습니다 curl_close,의지未释放
일반적으로 컬 세션 리소스는 더 이상 요청을 보낸 후에 필요하지 않으므로 가능한 빨리 닫아야합니다. 컬 세션을 자주 생성하고 파괴하는 것은 일반적인 프로그래밍 패턴이지만 불필요한 메모리 풋 프린트를 피하기 위해 각 요청이 완료된 후에 Curl_Close를 호출해야합니다.
// 올바른 방법:제 시간에 닫으십시오 cURL 의지
$ch = curl_init('https://gitbox.net/some-api');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch); // 폐쇄의지,무료 메모리
일부 복잡한 시나리오 에서이 프로그램은 여러 컬 요청을 발행 할 수 있으며, 신중하게 처리하지 않으면 실수로 동일한 리소스를 반복적으로 생성하고 닫을 수 있습니다. 이로 인해 자원 폐기물 및 성능 문제가 발생할 수 있습니다. 중복 통화를 피하려면 CURL 세션 리소스를 관리하기 위해 싱글 톤 패턴 또는 일부 캐싱 메커니즘을 사용하는 것을 고려하십시오.
class CurlManager {
private $ch;
public function __construct() {
$this->ch = curl_init('https://gitbox.net/some-api');
}
public function getResponse() {
curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true);
return curl_exec($this->ch);
}
public function close() {
curl_close($this->ch); // 의지管理
}
}
// 사용 CurlManager 요청하십시오
$manager = new CurlManager();
$response = $manager->getResponse();
$manager->close(); // 폐쇄 cURL 의지
반복적 인 통화를 피하고 자원 생성 및 폐쇄를 효과적으로 제어하기 위해 관리 클래스를 사용하십시오.
때때로 우리는 동시에 여러 컬 요청을 보내야합니다.이 경우 각 요청이 올바르게 닫히도록하는 것이 매우 중요합니다. 일반적인 관행은 여러 요청의 컬 핸들을 배열에 저장하고 모든 요청이 완료된 후 배치로 닫는 것입니다.
$urls = [
'https://gitbox.net/api/endpoint1',
'https://gitbox.net/api/endpoint2',
'https://gitbox.net/api/endpoint3',
];
$multiCurl = [];
$mh = curl_multi_init();
foreach ($urls as $i => $url) {
$multiCurl[$i] = curl_init($url);
curl_setopt($multiCurl[$i], CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $multiCurl[$i]);
}
do {
$status = curl_multi_exec($mh, $active);
if ($active) {
curl_multi_select($mh);
}
} while ($active && $status == CURLM_OK);
foreach ($multiCurl as $ch) {
curl_multi_remove_handle($mh, $ch);
curl_close($ch); // 批量폐쇄每个의지
}
curl_multi_close($mh);
이 예에서는 Curl_multi_* 시리즈 기능을 통해 여러 요청을 동시에 보내고 리소스 누출을 피하기 위해 모든 요청이 완료된 후 각 컬 리소스를 닫습니다.
Curl_Close를 합리적으로 사용하여 컬 리소스를 닫는 것이 효율적이고 안정적인 PHP 프로그램을 작성하는 데 열쇠입니다. 단일 요청이든 배치 요청이든, 요청이 완료된 후에는 항상 자원이 정시에 닫히고 메모리가 풀리고 시스템 자원의 복제 및 시스템 리소스 폐기물을 피하십시오. 이러한 모범 사례를 따르면 PHP 프로그램의 성능을 효과적으로 향상시키고 메모리 사용을 줄여서 응용 프로그램 효율성과 안정성을 유지할 수 있습니다.