<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Ce qui suit n'a rien à voir avec le contenu de l'article PHP Exemple de code</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"AccueillirPHPWidgets!\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">"Heure actuelle: <span class="hljs-subst">$time</span></span></span><span>\n";
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Dans PHP, les demandes simultanées peuvent être implémentées à l'aide des fonctions Curl_Multi_ * , améliorant ainsi l'efficacité des demandes HTTP. Cependant, dans le développement réel, Curl_Multi_Remove_Handle () Les appels échouent souvent. Cet article analysera les causes communes et fournira un dépannage rapide et des solutions.
curl_multi_remove_handle () est utilisé pour supprimer une seule poignée en boucle d'une poignée multithread Curl:
<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">// Exécuter une demande</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> > </span><span><span class="hljs-number">0</span></span><span>);
</span><span><span class="hljs-comment">// Retirer la poignée</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">// Fermez la poignée</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>
Si l'appel Curl_Multi_Remove_Handle () échoue, le faux est généralement renvoyé.
La poignée n'a pas été ajoutée à la manche multiple <br> Seules les poignées CURL qui ont été ajoutées à la manche multiple via CURL_MULTI_ADD_HANDLE () peuvent être supprimées. Si la poignée n'a jamais été ajoutée ou a été supprimée, appeler Curl_Multi_Remove_Handle () échouera.
Répétez la poignée <br> La même poignée de boucle ne peut être retirée de la poignée multiple qu'une seule fois. Les appels multiples entraîneront l'échec.
La manche multiple est fermée <br> Si curl_multi_close () a été exécuté avant d'appeler Curl_Multi_Remove_Handle () , la poignée multiple est détruite, de sorte que la poignée du clone ne peut pas être supprimée.
ne pas s'arrêter correctement pendant l'exécution <br> Si la boucle multi-EXEC ( curl_multi_exec ) n'a pas terminé ou est toujours en cours d'exécution, tenter de supprimer la poignée peut échouer. Il est généralement recommandé de s'assurer que $ running est 0 en premier.
Ressource corrompue ou poignée non valide <br> Si la poignée de boucle est fermée ou invalidée de manière inattendue, elle peut également entraîner l'échec de l'échec. Cela se produit souvent dans la gestion des exceptions ou la gestion des ressources d'erreur.
Confirmez que la poignée a été ajoutée à Multi
Avant d'appeler curl_multi_remove_handle () , vous pouvez enregistrer la poignée ajoutée:
<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>
Assurez-vous que plusieurs poignées sont toujours valides <br> Effectuez l'opération de retrait avant d'appeler Curl_Multi_Close () .
Attendez que toutes les demandes terminent <br> Utilisez une boucle pour vérifier si $ running est 0, puis retirez la poignée.
<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> > </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>
Vérifiez la valeur de retour et le message d'erreur <br> Si false est retourné, vous pouvez obtenir des informations d'erreur spécifiques via Curl_error ($ ch) ou curl_multi_errno ($ mh) .
Débogage du journal <br> Dans des demandes simultanées complexes, l'ordre dans lequel des poignées sont ajoutées et supprimées peuvent être utilisées pour enregistrer les enregistrements pour éviter le retrait ou le retrait répété sans ajout.
Assurez-vous toujours que chaque poignée de boucle n'est ajoutée qu'une seule fois et retirée une fois.
Avant de retirer la poignée, assurez-vous que la boucle multi-exécution est terminée.
Ne retirez pas la poignée du clone après la fermeture de la poignée multiple.
Utilisez le statut de poignée de journalisation de débogage pour faciliter l'emplacement rapide des problèmes.
Si vous rencontrez une exception ou une corruption des ressources, vous pouvez réinitialiser la poignée et l'essayer.
En suivant la méthode ci-dessus, la défaillance de Curl_Multi_Remove_Handle () peut être réduite efficacement, et la stabilité et la maintenabilité des demandes simultanées PHP peuvent être améliorées.