Introduction à la fonction PHP—curl_multi_exec() : Exécuter des sessions cURL avec plusieurs handles
cURL est une puissante bibliothèque open source pour la communication réseau en PHP. Il prend en charge divers protocoles tels que HTTP, HTTPS, FTP, etc. et fournit de nombreuses options riches en fonctionnalités, facilitant l'envoi de requêtes et l'obtention de réponses.
Dans de nombreux cas, nous devons traiter plusieurs requêtes d'URL en même temps, nous devons alors utiliser la fonction curl_multi_exec()
. Cette fonction nous permet d'exécuter plusieurs handles cURL en même temps, améliorant ainsi l'efficacité des requêtes. Cet article vous présentera en détail l'utilisation de la fonction curl_multi_exec()
et fournira des exemples de code correspondants. curl_multi_exec()
函数。该函数允许我们同时执行多个cURL句柄,从而提高请求的效率。本文将为大家详细介绍curl_multi_exec()
函数的使用方法,并提供相应的代码示例。
int curl_multi_exec(resource $multi_handle, int &$still_running)
$multi_handle
:cURL的多个句柄的资源,通过curl_multi_init()
函数创建。$still_running
:一个变量,用于存储仍在运行的句柄数量。如果出现错误,curl_multi_exec()
函数将返回一个错误码;否则,将返回0表示成功。
以下是一个使用curl_multi_exec()
函数并发发送多个请求的示例代码:
<?php // 创建cURL多个句柄 $multi_handle = curl_multi_init(); // 创建多个cURL会话并添加到多句柄中 $handles = array(); $handles[] = create_curl_handle("https://example.com/api1"); $handles[] = create_curl_handle("https://example.com/api2"); $handles[] = create_curl_handle("https://example.com/api3"); foreach ($handles as $handle) { curl_multi_add_handle($multi_handle, $handle); } // 执行多个cURL会话 $running = null; do { curl_multi_exec($multi_handle, $running); curl_multi_select($multi_handle); // 等待I/O事件 } while ($running > 0); // 获取每个请求的响应 foreach ($handles as $handle) { $response = curl_multi_getcontent($handle); // 处理响应数据 echo $response; // 关闭cURL会话 curl_multi_remove_handle($multi_handle, $handle); curl_close($handle); } // 关闭多个句柄 curl_multi_close($multi_handle); // 创建一个cURL会话,并设置选项 function create_curl_handle($url) { $handle = curl_init(); curl_setopt($handle, CURLOPT_URL, $url); curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); return $handle; } ?>
上述代码首先创建了一个cURL多句柄资源,并通过循环创建了多个cURL会话。接下来,将这些会话添加到多句柄中,并执行多个cURL会话。在每次执行时,调用curl_multi_select()
函数等待I/O事件。最后,通过curl_multi_getcontent()
函数获取每个请求的响应,并进行相应处理。
curl_multi_exec()
函数之前,一定要先调用curl_multi_add_handle()
将每个会话添加到多句柄中。curl_multi_getcontent()
函数获取响应数据之前,一定要确保请求已完成,即运行中的句柄数为0。curl_multi_remove_handle()
函数从多句柄中移除会话,并使用curl_close()
关闭会话。curl_multi_exec()
int curl_multi_exec(resource $multi_handle, int &$still_running)
🎜🎜3. Description du paramètre🎜$multi_handle
: Les ressources de plusieurs handles cURL sont créées via la fonction curl_multi_init()
. $still_running
: Une variable utilisée pour stocker le nombre de handles encore en cours d'exécution. curl_multi_exec()
renverra un code d'erreur ; sinon, elle renverra 0 pour indiquer le succès. 🎜🎜5. Exemple de code🎜🎜Ce qui suit est un exemple de code qui utilise la fonction curl_multi_exec()
pour envoyer plusieurs requêtes simultanément : 🎜rrreee🎜Le code ci-dessus crée d'abord une ressource multi-handle cURL et crée à travers une boucle Plusieurs sessions cURL. Ensuite, ajoutez ces sessions au multihandle et exécutez plusieurs sessions cURL. Lors de chaque exécution, la fonction curl_multi_select()
est appelée pour attendre les événements d'E/S. Enfin, obtenez la réponse de chaque requête via la fonction curl_multi_getcontent()
et traitez-la en conséquence. 🎜🎜6. Notes🎜curl_multi_exec()
, assurez-vous d'appeler curl_multi_add_handle()
pour ajouter chaque session au multi-handle milieu. curl_multi_getcontent()
pour obtenir des données de réponse, assurez-vous que la requête est terminée, c'est-à-dire que le nombre de handles en cours d'exécution est de 0. curl_multi_remove_handle()
pour supprimer une session d'un multi-handle, et utilisez curl_close()
pour fermer la session. curl_multi_exec()
est une fonction très utile qui peut exécuter plusieurs sessions cURL en même temps pour améliorer l'efficacité des requêtes. Grâce à l'exemple de code ci-dessus, nous pouvons comprendre comment utiliser cette fonction pour envoyer plusieurs requêtes simultanément et obtenir les données de réponse pour chaque requête. Dans le développement réel, nous pouvons optimiser et étendre davantage cet exemple de code en fonction de nos propres besoins. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!