현재 위치: > 최신 기사 목록> curl_multi_add_handle 함수의 기본 사용에 대한 자세한 설명, 작동 원리를 신속하게 시작하고 이해하는 방법은 무엇입니까?

curl_multi_add_handle 함수의 기본 사용에 대한 자세한 설명, 작동 원리를 신속하게 시작하고 이해하는 방법은 무엇입니까?

gitbox 2025-08-28
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 이 문서는 학습 및 참조 목적을위한 것입니다,소개하다 PHP 가운데 curl_multi_add_handle 기능의 기본 사용。</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
&lt;hr&gt;

</span><span><span class="hljs-comment"># curl_multi_add_handle 기능의 기본 사용에 대한 자세한 설명,시작하고 빠르게 작동하는 방법을 이해하는 방법?</span></span><span>

사용 중 PHP 동시성 HTTP 요청시,`curl_multi_add_handle` 매우 핵심 기능입니다。작동합니다 `curl_multi_init`、`curl_multi_exec` 동일한 기능,여러 메시지를 병렬로 보낼 수 있습니다 cURL 묻다,从而大大提高网络묻다的效率。本文将详细소개하다 `curl_multi_add_handle` 기본 사용,작동 방식을 빠르게 이해하고 실습을 실천하는 데 도움이됩니다.。

</span><span><span class="hljs-comment">## 하나、무엇인가요 curl_multi_add_handle?</span></span><span>

`</span><span><span class="hljs-title function_ invoke__">curl_multi_add_handle</span></span><span>()` 예 PHP 가운데用于添加单个 cURL 묻다(지금 바로 curl handle)到하나个多 cURL 세션(multi handle)가운데的函数。它的作用예告诉 `curl_multi_exec`:“我这里有하나个新的묻다,请하나并处理它”。

**기능 서명:**

```php
</span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">curl_multi_add_handle</span></span><span>(CurlMultiHandle </span><span><span class="hljs-variable">$multi_handle</span></span><span>, CurlHandle </span><span><span class="hljs-variable">$ch</span></span><span>);
</span></span>

반환 값은 부울 값으로 추가가 성공했는지 여부를 나타냅니다.

2. Curl_multi 시리즈 기능을 사용하는 이유는 무엇입니까?

기본 CURL 요청에서 각 요청은 동기식 차단됩니다. 즉, 다음 요청은 이전 요청이 완료된 후에 만 ​​실행될 수 있습니다. 여러 인터페이스 나 웹 사이트 데이터를 요청할 때 매우 비효율적입니다. Curl_multi 시리즈 기능의 도입은 비 차단 동시성 처리 솔루션을 제공합니다.

3. 기본 예 : 여러 URL에 대한 동시 요청

다음은 curl_multi_add_handle을 사용하는 완전한 예입니다. 여러 웹 페이지를 병렬로 요청하는 방법을 보여줍니다.

 <span><span><span class="hljs-variable">$urls</span></span><span> = [
    </span><span><span class="hljs-string">"https://www.example.com/"</span></span><span>,
    </span><span><span class="hljs-string">"https://www.php.net/"</span></span><span>,
    </span><span><span class="hljs-string">"https://www.wikipedia.org/"</span></span><span>
];

</span><span><span class="hljs-variable">$multiHandle</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_multi_init</span></span><span>();
</span><span><span class="hljs-variable">$curlHandles</span></span><span> = [];

</span><span><span class="hljs-comment">// 初始化每个묻다并添加到 multi handle 가운데</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$urls</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$url</span></span><span>) {
    </span><span><span class="hljs-variable">$ch</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_init</span></span><span>();
    </span><span><span class="hljs-title function_ invoke__">curl_setopt_array</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>, [
        CURLOPT_URL =&gt; </span><span><span class="hljs-variable">$url</span></span><span>,
        CURLOPT_RETURNTRANSFER =&gt; </span><span><span class="hljs-literal">true</span></span><span>,
        CURLOPT_TIMEOUT =&gt; </span><span><span class="hljs-number">10</span></span><span>
    ]);
    </span><span><span class="hljs-title function_ invoke__">curl_multi_add_handle</span></span><span>(</span><span><span class="hljs-variable">$multiHandle</span></span><span>, </span><span><span class="hljs-variable">$ch</span></span><span>);
    </span><span><span class="hljs-variable">$curlHandles</span></span><span>[] = </span><span><span class="hljs-variable">$ch</span></span><span>;
}

</span><span><span class="hljs-comment">// 执行所有묻다</span></span><span>
</span><span><span class="hljs-keyword">do</span></span><span> {
    </span><span><span class="hljs-variable">$status</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_multi_exec</span></span><span>(</span><span><span class="hljs-variable">$multiHandle</span></span><span>, </span><span><span class="hljs-variable">$active</span></span><span>);
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$active</span></span><span>) {
        </span><span><span class="hljs-title function_ invoke__">curl_multi_select</span></span><span>(</span><span><span class="hljs-variable">$multiHandle</span></span><span>); </span><span><span class="hljs-comment">// 기다리다 I/O</span></span><span>
    }
} </span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$active</span></span><span> &amp;&amp; </span><span><span class="hljs-variable">$status</span></span><span> == CURLM_OK);

</span><span><span class="hljs-comment">// 결과를 얻으십시오</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$curlHandles</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$ch</span></span><span>) {
    </span><span><span class="hljs-variable">$content</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_multi_getcontent</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>);
    </span><span><span class="hljs-variable">$info</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_getinfo</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>);
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"URL: "</span></span><span> . </span><span><span class="hljs-variable">$info</span></span><span>[</span><span><span class="hljs-string">'url'</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"HTTP Code: "</span></span><span> . </span><span><span class="hljs-variable">$info</span></span><span>[</span><span><span class="hljs-string">'http_code'</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Content Length: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$content</span></span><span>) . </span><span><span class="hljs-string">"\n\n"</span></span><span>;
    </span><span><span class="hljs-title function_ invoke__">curl_multi_remove_handle</span></span><span>(</span><span><span class="hljs-variable">$multiHandle</span></span><span>, </span><span><span class="hljs-variable">$ch</span></span><span>);
    </span><span><span class="hljs-title function_ invoke__">curl_close</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>);
}

</span><span><span class="hljs-title function_ invoke__">curl_multi_close</span></span><span>(</span><span><span class="hljs-variable">$multiHandle</span></span><span>);
</span></span>

4. 작업 원리에 대한 간단한 설명

  1. curl_multi_init ()를 사용하여 멀티 핸들을 만듭니다.

  2. 각 URL에 대한 일반 컬 핸들을 만들고 매개 변수를 설정하십시오.

  3. curl_multi_add_handle ()을 사용하여 각 핸들을 멀티 핸들에 추가하십시오.

  4. curl_multi_exec ()를 사용하여 모든 요청의 실행을 시작하십시오.

  5. Curl_Multi_Select ()를 사용하여 활성 연결이있을 때까지 차단하십시오.

  6. 모든 요청을 처리 한 후 Curl_multi_Remove_handle ()을 사용하여 모든 핸들을 제거하고 닫아야합니다.

5. 일반적인 예방 조치

  • 각 핸들에는 멀티 핸들에 추가하기 전에 필요한 Curlopt_* 매개 변수가 모두 있어야합니다.

  • 자원을 정리하는 것을 잊지 마십시오 : curl_multi_remove_handle ()curl_close () .

  • curl_multi_exec ()는 모든 작업이 완료 될 때까지 여러 통화가 필요할 수 있으며, 이는 일반적으로 do-while 루프와 결합됩니다.

  • Curl_multi_Select ()는 유휴 CPU를 피하기 위해 네트워크 응답을 기다리는 데 사용됩니다.

6. 요약

curl_multi_add_handle은 고성능 네트워크 요청을 구축하기위한 기초입니다. 그 역할을 이해하면 PHP의 비동기 처리 기능에 대한 더 깊은 이해를 얻는 데 도움이됩니다. 이를 마스터하면 동시 크롤러 및 다중 인터페이스 집계 요청과 같은 고급 기능을 구현하여 I/O 집약적 시나리오에서 PHP 프로그램의 효율성을 크게 향상시킬 수 있습니다.

샘플 코드를 더 연습하면이 기능을보다 능숙하게 사용하고보다 효율적이고 전문적인 PHP 프로그램을 작성할 수 있습니다.

 <span></span>