Aktueller Standort: Startseite> Neueste Artikel> Was sind die häufigen Gründe für das Versagen des Anrufs curl_multi_remove_handle? Wie kann man es schnell beheben und es lösen?

Was sind die häufigen Gründe für das Versagen des Anrufs curl_multi_remove_handle? Wie kann man es schnell beheben und es lösen?

gitbox 2025-09-09

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// Das Folgende hat nichts mit dem Inhalt des Artikels zu tun PHP Codebeispiel</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"WillkommenPHPWidgets!\n"</span></span><span>;
</span><span><span class="hljs-variable">$time</span></span><span> = </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Aktuelle Zeit: <span class="hljs-subst">$time</span></span></span><span>\n";
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

In PHP können gleichzeitige Anfragen mit Curl_Multi_* -Seriefunktionen implementiert werden, wodurch die Effizienz von HTTP -Anforderungen verbessert wird. In der tatsächlichen Entwicklung fehlen jedoch curl_multi_remove_handle () Anrufe häufig. In diesem Artikel werden gemeinsame Ursachen analysiert und eine schnelle Fehlerbehebung und Lösungen liefern.

1. Die grundlegende Verwendung von curl_multi_remove_handle ()

curl_multi_remove_handle () wird verwendet, um einen einzelnen Curl -Handle von einem Curl Multithread -Griff zu entfernen:

 <span><span><span class="hljs-variable">$mh</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_multi_init</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-string">"https://example.com"</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-string">"https://example.org"</span></span><span>);

</span><span><span class="hljs-title function_ invoke__">curl_multi_add_handle</span></span><span>(</span><span><span class="hljs-variable">$mh</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">$mh</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-variable">$running</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
</span><span><span class="hljs-keyword">do</span></span><span> {
    </span><span><span class="hljs-title function_ invoke__">curl_multi_exec</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>, </span><span><span class="hljs-variable">$running</span></span><span>);
} </span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$running</span></span><span> &gt; </span><span><span class="hljs-number">0</span></span><span>);

</span><span><span class="hljs-comment">// Den Griff entfernen</span></span><span>
</span><span><span class="hljs-title function_ invoke__">curl_multi_remove_handle</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>, </span><span><span class="hljs-variable">$ch1</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_multi_remove_handle</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>, </span><span><span class="hljs-variable">$ch2</span></span><span>);

</span><span><span class="hljs-comment">// Schließen Sie den Griff</span></span><span>
</span><span><span class="hljs-title function_ invoke__">curl_multi_close</span></span><span>(</span><span><span class="hljs-variable">$mh</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>

Wenn der Anruf curl_multi_remove_handle () fehlschlägt, wird falsch zurückgegeben.

2. Häufige Gründe für einen Anrufversagen

  1. Der Griff wurde nicht zum Multi -Griff <br> hinzugefügt Nur Curl -Griffe, die über curl_multi_add_handle () zum Multi -Handle hinzugefügt wurden, können entfernt werden. Wenn der Handle noch nie hinzugefügt oder entfernt wurde, fehlschlägt die Aufrufen von CURL_MULTI_REMOVE_HANDLE () .

  2. Wiederholen Sie den Griff <br> Der gleiche Curl -Griff kann nur einmal vom Multi -Griff entfernt werden. Mehrere Anrufe verursachen ein Fehler.

  3. Multi -Griff ist geschlossen <br> Wenn CURL_MULTI_CLOSE () vor dem Aufrufen von CURL_MULTI_REMOVE_HANDLE () ausgeführt wurde , wird das Multi -Griff zerstört, sodass der Klongriff nicht entfernt werden kann.

  4. Curl wurde während der Ausführung nicht richtig gestoppt <br> Wenn die Multi-EXEC-Schleife ( curl_multi_exec ) nicht abgeschlossen ist oder noch ausgeführt wird, kann der Versuch, den Griff zu entfernen, möglicherweise fehlschlagen. Es wird normalerweise empfohlen, sicherzustellen, dass $ Running zuerst 0 ist.

  5. Beschädigte Ressource oder ungültiges Handle <br> Wenn der Curl -Griff unerwartet geschlossen oder ungültig ist, kann er auch dazu führen, dass die Entfernung fehlschlägt. Dies tritt häufig in der Ausnahmeregelung oder in der Verwaltung von Fehlerressourcen auf.

3.. Schnelle Inspektionsmethode

  1. Bestätigen Sie, dass der Griff zu Multi hinzugefügt wurde
    Bevor Sie curl_multi_remove_handle () aufrufen, können Sie den hinzugefügten Handle aufzeichnen:

     <span><span><span class="hljs-variable">$handles</span></span><span> = [];
    </span><span><span class="hljs-title function_ invoke__">curl_multi_add_handle</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>, </span><span><span class="hljs-variable">$ch1</span></span><span>);
    </span><span><span class="hljs-variable">$handles</span></span><span>[] = </span><span><span class="hljs-variable">$ch1</span></span><span>;
    </span></span>
  2. Stellen Sie sicher, dass mehrere Griffe noch gültig sind <br> Führen Sie die Entfernungsoperation durch, bevor Sie curl_multi_close () aufrufen.

  3. Warten Sie auf alle Anfragen, um <br> zu vervollständigen Überprüfen Sie eine Schleife, um zu prüfen, ob $ Laufen 0 ist, und entfernen Sie dann den Griff.

     <span><span><span class="hljs-keyword">do</span></span><span> {
        </span><span><span class="hljs-title function_ invoke__">curl_multi_exec</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>, </span><span><span class="hljs-variable">$running</span></span><span>);
    } </span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$running</span></span><span> &gt; </span><span><span class="hljs-number">0</span></span><span>);
    
    </span><span><span class="hljs-title function_ invoke__">curl_multi_remove_handle</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>, </span><span><span class="hljs-variable">$ch1</span></span><span>);
    </span></span>
  4. Überprüfen Sie den Rückgabewert und die Fehlermeldung <br> <br> Wenn FALSE zurückgegeben wird, können Sie spezifische Fehlerinformationen über Curl_error ($ CH) oder curl_multi_errno ($ MH) erhalten.

  5. Debugug Log <br> In komplexen gleichzeitigen Anforderungen kann die Reihenfolge, in der die Griffe hinzugefügt und entfernt werden, verwendet werden, um Datensätze zu protokollieren, um wiederholtes Entfernen oder Entfernen ohne Zugabe zu vermeiden.

4. Zusammenfassung der Strategie lösen

  • Stellen Sie immer sicher, dass jeder Curl -Griff nur einmal hinzugefügt und einmal entfernt wird.

  • Stellen Sie vor dem Entfernen des Griffs sicher, dass die Multi -Ausführungsschleife beendet ist.

  • Entfernen Sie den Klongriff nicht, nachdem Sie den Multi -Griff geschlossen haben.

  • Verwenden Sie den Status eines Debug -Protokollierungshandels, um den schnellen Standort von Problemen zu erleichtern.

  • Wenn Sie auf Ausnahme oder Ressourcenbeschäftigung stoßen, können Sie den Griff erneut initialisieren und versuchen.

Durch die Befolgung der obigen Methode kann der Aufruf von curl_multi_remove_handle () effektiv reduziert werden und die Stabilität und Wartbarkeit von PHP -Anforderungen verbessert werden.