네트워크 요청에 PHP의 CURL 라이브러리를 사용할 때 일반적으로 작동 할 별도의 컬 핸들 ( Curl_Init () )을 만듭니다. 그러나 curl_share_init () 및 curl_share_setopt ()는 여러 컬 핸들 (예 : 쿠키, DNS 캐시 또는 SSL 세션 등) 사이에 일부 데이터를 공유해야 할 때 편리합니다.
이 기사는 이러한 기능을 사용하는 방법과 CurlShopt_share 및 CurlShopt_unshare를 통해 리소스 공유 및 공유 메커니즘을 취소하는 방법을 자세히 분석합니다.
컬에서 각 컬 핸들은 기본적으로 독립적입니다. 여러 핸들이 일부 내부 데이터를 공유 해야하는 경우 (예 : DNS 해상도 캐시, 쿠키 데이터 또는 SSL 세션 캐시) "공유 핸들"을 사용할 수 있습니다.
PHP는 다음과 관련된 기능을 제공합니다.
curl_share_init () : 공유 핸들을 초기화합니다.
curl_share_setopt () : 공유 핸들에 대한 공유 옵션을 설정합니다.
curl_share_close () : 공유 핸들을 닫습니다.
해당 옵션 :
CurlShopt_share : 공유 할 리소스 유형을 지정합니다.
Curlshopt_unshare : 공유 할 자원 유형을 지정합니다.
두 개의 다른 컬 요청이 있고 동일한 쿠키 데이터를 공유하기를 원합니다. 이러한 방식으로 첫 번째 요청에 대한 쿠키 세트 및 두 번째 요청은 자동으로 사용할 수 있습니다.
<?php
// 공유 핸들을 초기화하십시오
$sh = curl_share_init();
// 공유 콘텐츠를 설정합니다,우리는 여기서 공유합니다 Cookie
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
// 첫 번째를 초기화하십시오 cURL 핸들
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://m66.net/page1");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch1, CURLOPT_SHARE, $sh);
$response1 = curl_exec($ch1);
curl_close($ch1);
// 두 번째를 초기화하십시오 cURL 핸들
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "https://m66.net/page2");
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_SHARE, $sh);
$response2 = curl_exec($ch2);
curl_close($ch2);
// 공유를 취소하십시오 Cookie
curl_share_setopt($sh, CURLSHOPT_UNSHARE, CURL_LOCK_DATA_COOKIE);
// 关闭共享핸들
curl_share_close($sh);
// 출력 결과
echo "Response 1:\n$response1\n";
echo "Response 2:\n$response2\n";
?>
1 ??? curl_share_init ()
먼저 curl_share_init ()을 호출하여 공유 핸들 SH를 생성합니다. 이는 공유 할 데이터를 관리하는 데 특별히 사용됩니다.
2 ?? curl_share_setopt ($ sh, curlshopt_share, curl_lock_data_cookie)
여기에서는 공유 쿠키 데이터를 지정합니다. curl_lock_data_cookie는 쿠키 데이터를 나타내며 다른 사용 가능한 값은 다음과 같습니다.
curl_lock_data_dns (DNS 캐시)
curl_lock_data_ssl_session (SSL 세션)
curl_share_setopt ()를 여러 번 호출하여 다양한 데이터를 공유 할 수 있습니다.
3 ???? curlopt_share
각 컬 핸들 ( $ CH1 , $ CH2 )은 지정된 데이터를 공유 할 수 있도록 Curlopt_share를 통해 공유 핸들 $ SH 에 바인딩해야합니다.
4 ?? curl_share_setopt ($ sh, curlshopt_unshare, curl_lock_data_cookie)
특정 데이터를 공유하는 것이 더 이상 필요하지 않을 때 CurlShopt_unshare 와 공유를 취소하도록 지정할 수 있습니다. 참고 : Unshare는 이러한 유형의 데이터를 공유하는 것만 취소하지만 공유 핸들은 여전히 사용할 수 있습니다.
5 ?? curl_share_close ($ sh)
마지막으로 공유 핸들 리소스를 해제하십시오. 이 단계는 필요합니다. 그렇지 않으면 메모리 누출이 발생할 수 있습니다.
공유 핸들은 동일한 프로세스 내에서만 유효합니다.
모든 데이터 유형이 공유에 적합한 것은 아니며 실제 응용 프로그램에 적용 할 때 특정 시나리오가 필요합니다.
스레드 안전을 보장하기 위해 다중 스레드 환경에서 공유 핸들을 사용하십시오.