Aktueller Standort: Startseite> Neueste Artikel> Wie entfernen Sie einen Curl -Handle korrekt von einem Multi -Handle mit CURL_MULTI_REMOVE_HANDLE?

Wie entfernen Sie einen Curl -Handle korrekt von einem Multi -Handle mit CURL_MULTI_REMOVE_HANDLE?

gitbox 2025-08-12

Was ist curl_multi_remove_handle?

Die Funktion curl_multi_remove_handle wird verwendet, um einen separaten Curl -Handle von einem mehrfachen Curl -Griff zu entfernen. Mehrere Curl -Handles ermöglichen es uns, mehrere Anforderungen gleichzeitig auszuführen, und es verwaltet zentral mehrere Curl -Handles. Wenn eine Anfrage abgeschlossen ist oder wir sie nicht mehr benötigen, können wir curl_multi_remove_handle verwenden, um die Anforderung aus dem Mehrfachgriff zu entfernen.

Funktionsprototyp:

 <span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">curl_multi_remove_handle</span></span><span> ( resource </span><span><span class="hljs-variable">$multi_handle</span></span><span> , resource </span><span><span class="hljs-variable">$ch</span></span><span> )
</span></span>
  • $ multi_handle : Eine Curl-Multi-Griff-Ressource, normalerweise ein Handle, das von curl_multi_init () initialisiert wurde.

  • $ CH : Eine separate Curl -Handlungsressource, die entfernt werden muss, normalerweise ein von curl_init () initialisiertes Handle.

Der Rückgabewert dieser Funktion ist ein boolescher Wert, der bei erfolgreichem und falsch beim Versagen den wahren Wert zurückgibt.


Szenarien verwenden

Normalerweise initialisieren wir bei mehreren Curl -Anforderungen einen mehrfachen Curl -Handle mit curl_multi_init () und über Curl_Multi_Add_handle () mehrere separate Curl -Handles hinzu. Sobald die Anforderung abgeschlossen ist oder ein Fehler auftritt, müssen wir den entsprechenden separaten Griff von den mehreren Griffen entfernen, und dann können wir curl_multi_remove_handle verwenden.

Beispielcode:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>

</span><span><span class="hljs-comment">// Initialisierung multi cURL Handhaben</span></span><span>
</span><span><span class="hljs-variable">$multi_handle</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_multi_init</span></span><span>();

</span><span><span class="hljs-comment">// Initialisierung两个单独的 cURL Handhaben</span></span><span>
</span><span><span class="hljs-variable">$ch1</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_init</span></span><span>();
</span><span><span class="hljs-variable">$ch2</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_init</span></span><span>();

</span><span><span class="hljs-comment">// Legen Sie den ersten angeforderten fest URL und andere Optionen</span></span><span>
</span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch1</span></span><span>, CURLOPT_URL, </span><span><span class="hljs-string">'http://example.com/api/endpoint1'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch1</span></span><span>, CURLOPT_RETURNTRANSFER, </span><span><span class="hljs-literal">true</span></span><span>);

</span><span><span class="hljs-comment">// Stellen Sie die zweite Anfrage fest URL und andere Optionen</span></span><span>
</span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch2</span></span><span>, CURLOPT_URL, </span><span><span class="hljs-string">'http://example.com/api/endpoint2'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch2</span></span><span>, CURLOPT_RETURNTRANSFER, </span><span><span class="hljs-literal">true</span></span><span>);

</span><span><span class="hljs-comment">// Setzen Sie diese beiden cURL Handhaben添加到 multi cURL Handhaben中</span></span><span>
</span><span><span class="hljs-title function_ invoke__">curl_multi_add_handle</span></span><span>(</span><span><span class="hljs-variable">$multi_handle</span></span><span>, </span><span><span class="hljs-variable">$ch1</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_multi_add_handle</span></span><span>(</span><span><span class="hljs-variable">$multi_handle</span></span><span>, </span><span><span class="hljs-variable">$ch2</span></span><span>);

</span><span><span class="hljs-comment">// Eine Anfrage ausführen</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">$multi_handle</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">$multi_handle</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">// Entfernen Sie den ersten cURL Handhaben</span></span><span>
</span><span><span class="hljs-title function_ invoke__">curl_multi_remove_handle</span></span><span>(</span><span><span class="hljs-variable">$multi_handle</span></span><span>, </span><span><span class="hljs-variable">$ch1</span></span><span>);

</span><span><span class="hljs-comment">// Alle schließen cURL Handhaben</span></span><span>
</span><span><span class="hljs-title function_ invoke__">curl_multi_close</span></span><span>(</span><span><span class="hljs-variable">$multi_handle</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_close</span></span><span>(</span><span><span class="hljs-variable">$ch1</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_close</span></span><span>(</span><span><span class="hljs-variable">$ch2</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Code analysieren

  1. Initialisieren Sie Multi Curl -Handle: Wir verwenden zunächst curl_multi_init () , um einen Mehrfachgriff zu initialisieren, der für die Verwaltung mehrerer Anforderungen verantwortlich ist.

  2. Initialisieren Sie einen separaten Curl -Griff: Anschließend initialisieren wir zwei Curl -Handle CH1 und CH2 , die zwei Anforderungen entsprechen.

  3. Setzen Sie Anforderungsoptionen: Stellen Sie die angeforderte URL fest und geben Sie Datenoptionen für jeden einzelnen Curl -Handle zurück.

  4. Fügen Sie Multi -Curl -Griffe Griffe hinzu: Verwenden Sie Curl_Multi_Add_handle (), um CH1 und CH2 zu mehreren Curl -Griffen hinzuzufügen, damit sie gleichzeitig ausgeführt werden können.

  5. Führen Sie die Anforderung aus: Verwenden Sie Curl_Multi_exec (), um alle zu den mehreren Handles hinzugefügten Anforderungen zu verarbeiten und auszuführen, und verwenden Sie curl_multi_select (), um die Anforderung abzuschließen.

  6. Curl -Handle entfernen: Sobald eine Anforderung abgeschlossen ist oder wir keine Anforderung mehr benötigen, können Sie curl_multi_remove_handle () verwenden, um das Curl -Handle der Anforderung aus dem Mehrfachgriff zu entfernen.

  7. Griff schließen: Schließlich schließen Sie die mehrfachen Griffe und alle separaten Curl -Handles, um die Ressource zu befreien.


Dinge zu beachten

  1. Entfernungszeit: Der entsprechende Curl -Griff sollte nur entfernt werden, wenn die Anfrage abgeschlossen wurde oder wir bestätigen, dass die Anfrage nicht mehr benötigt wird. Nachdem der Betrieb entfernt wurde, nimmt dieser Handle nicht mehr an der Ausführung von Anfragen teil.

  2. Ressourcenveröffentlichung: Auch nach dem Entfernen des Curl -Handels ist Curl_Close () erforderlich, um Curl_Close () explizit aufzurufen, um die Curl -Ressource freizugeben, andernfalls können Speicherlecks auftreten.

  3. Genauigkeitsbeschränkung: In hohen Parallelitätsszenarien kann die Verwendung von Curl_Multi_Remove_handle dazu beitragen, mehrere gleichzeitige Anforderungen effektiv zu verwalten, unnötige Handles rechtzeitig zu bereinigen und unnötige Ressourcenbeschäftigung zu vermeiden.