Aktueller Standort: Startseite> Neueste Artikel> Detaillierte Erläuterung der grundlegenden Verwendung der Funktion curl_multi_add_handle, wie man schnell anfängt und ihr Arbeitsprinzip versteht?

Detaillierte Erläuterung der grundlegenden Verwendung der Funktion curl_multi_add_handle, wie man schnell anfängt und ihr Arbeitsprinzip versteht?

gitbox 2025-08-28
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// Dieses Dokument dient zum Lernen und zur Referenzzwecke,einführen PHP Mitte curl_multi_add_handle Grundnutzung von Funktionen。</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 Detaillierte Erklärung der grundlegenden Verwendung von Funktionen,Wie man losgeht und versteht, wie es schnell funktioniert?</span></span><span>

Im Einsatz PHP Parallelität HTTP Auf Anfrage,`curl_multi_add_handle` Es ist eine sehr Kernfunktion。Es funktioniert `curl_multi_init`、`curl_multi_exec` Gleiche Funktion,Es ist möglich, mehrere Nachrichten parallel zu senden cURL fragen,从而大大提高网络fragen的效率。本文将详细einführen `curl_multi_add_handle` Grundnutzung,Hilft Ihnen schnell zu verstehen, wie es funktioniert und es praktisch üben。

</span><span><span class="hljs-comment">## eins、Was ist curl_multi_add_handle?</span></span><span>

`</span><span><span class="hljs-title function_ invoke__">curl_multi_add_handle</span></span><span>()` Ja PHP Mitte用于添加单个 cURL fragen(Im Augenblick curl handle)到eins个多 cURL Sitzung(multi handle)Mitte的函数。它的作用Ja告诉 `curl_multi_exec`:“我这里有eins个新的fragen,请eins并处理它”。

**Funktionssignatur:**

```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>

Der Rückgabewert ist ein boolescher Wert, der angibt, ob die Zugabe erfolgreich war.

2. Warum die Funktion curl_multi -Serie verwenden?

In der Standard -Curl -Anforderung wird jede Anforderung synchron blockiert, dh die nächste kann erst nach Abschluss der vorherigen Anforderung ausgeführt werden. Dies ist sehr ineffizient, wenn Sie mehrere Schnittstellen oder Website -Daten anfordern. Die Einführung der Funktionen von Curl_Multi-Serien bietet eine nicht blockierende Parallelitätsverarbeitungslösung.

3. Grundes Beispiel: Gleichzeitige Anfragen für mehrere URLs

Hier ist ein vollständiges Beispiel mit CURL_MULTI_ADD_HANDLE , in dem nach demonstrieren, wie mehrere Webseiten parallel anfordern:

 <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">// 初始化每个fragen并添加到 multi handle Mitte</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">// 执行所有fragen</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">// Warten 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">// Ergebnisse erhalten</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. Kurzbeschreibung des Arbeitsprinzips

  1. Erstellen Sie einen Multi -Handle mit Curl_Multi_init () .

  2. Erstellen Sie für jede URL einen normalen Curl -Handle und setzen Sie die Parameter.

  3. Verwenden Sie curl_multi_add_handle () , um jeden Handle zum Multi -Griff hinzuzufügen.

  4. Verwenden Sie curl_multi_exec (), um die Ausführung aller Anfragen zu starten.

  5. Verwenden Sie curl_multi_select () , um zu blockieren, bis eine aktive Verbindung besteht.

  6. Denken Sie nach der Bearbeitung aller Anfragen daran, curl_multi_remove_handle () zu verwenden, um alle Griffe zu entfernen und zu schließen.

5. gemeinsame Vorsichtsmaßnahmen

  • Jeder Griff muss über alle erforderlichen Curlopt_* -Parameter eingestellt sein, bevor sie zum Multi -Griff hinzugefügt werden.

  • Vergessen Sie nicht, Ressourcen aufzuräumen: curl_multi_remove_handle () und curl_close () .

  • curl_multi_exec () erfordert möglicherweise mehrere Anrufe, bis alle Vorgänge abgeschlossen sind, was normalerweise mit einer Schleife in Kombination kombiniert wird.

  • curl_multi_select () wird verwendet, um auf die Netzwerkreaktion zu warten, um die INFAL -CPU zu vermeiden.

6. Zusammenfassung

CURL_MULTI_ADD_HANDLE ist die Grundlage für die Erstellung von Hochleistungsnetzwerkenanforderungen. Das Verständnis seiner Rolle hilft Ihnen dabei, ein tieferes Verständnis der asynchronen Verarbeitungsfähigkeiten in PHP zu erlangen. Durch das Mastering können Sie erweiterte Funktionen wie gleichzeitige Crawlers und Aggregationsanfragen mit mehreren Eingriffen implementieren, was die Effizienz Ihrer PHP-Programme in I/O-intensiven Szenarien erheblich verbessert.

Wenn Sie den Beispielcode mehr üben, können Sie diese Funktion geschickt mehr verwenden und effizientere und professionellere PHP -Programme schreiben.

 <span></span>