Maison > Article > développement back-end > Amélioration de l'efficacité : partage des compétences de développement pour le téléchargement HTTP asynchrone PHP de plusieurs fichiers
Amélioration de l'efficacité : partage de conseils de développement pour le téléchargement HTTP asynchrone PHP de plusieurs fichiers
Dans les applications Internet modernes, le téléchargement de fichiers est une exigence très courante. Cependant, lorsqu'un grand nombre de fichiers doivent être téléchargés, la méthode de téléchargement synchrone traditionnelle est souvent inefficace, ce qui oblige les utilisateurs à attendre longtemps et réduit l'expérience utilisateur. Cet article présentera une technique de développement permettant d'utiliser le HTTP asynchrone PHP pour télécharger plusieurs fichiers afin d'améliorer l'efficacité du téléchargement et l'expérience utilisateur.
$urls = array( 'http://example.com/file1.zip', 'http://example.com/file2.zip', 'http://example.com/file3.zip', // 添加更多文件链接 ); $mh = curl_multi_init(); $handles = array(); foreach ($urls as $url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_multi_add_handle($mh, $ch); $handles[] = $ch; } $running = null; do { curl_multi_exec($mh, $running); } while ($running > 0); foreach ($handles as $ch) { curl_multi_remove_handle($mh, $ch); curl_close($ch); } curl_multi_close($mh);
Le code ci-dessus définit d'abord le lien du fichier qui doit être téléchargé, puis initialise un handle de multitraitement cURL. Parcourez les liens de fichiers, en créant un handle cURL pour chaque lien et en l'ajoutant au handle multitraitement. Par la suite, toutes les requêtes sont exécutées en appelant la fonction curl_multi_exec()
jusqu'à ce qu'il n'y ait plus aucune requête en cours d'exécution. Enfin, nettoyez les ressources et fermez les handles cURL et les handles multitraitement. curl_multi_exec()
函数来执行所有请求,直到没有请求在运行为止。最后,清理资源,关闭 cURL 句柄和多处理句柄。
curl_multi_info_read()
函数来获取每个请求的信息。下面是一个示例代码:$completed = 0; do { $mh = curl_multi_init(); $handles = array(); foreach ($urls as $url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_multi_add_handle($mh, $ch); $handles[] = $ch; } $running = null; do { curl_multi_exec($mh, $running); $info = curl_multi_info_read($mh); if ($info !== false) { // 处理下载结果 $completed++; $handle = $info['handle']; // ... } } while ($running > 0); foreach ($handles as $ch) { curl_multi_remove_handle($mh, $ch); curl_close($ch); } curl_multi_close($mh); } while ($completed < count($urls));
以上代码中,在每次执行异步 HTTP 请求后,使用 curl_multi_info_read()
函数检查是否有请求已经完成。如果有完成的请求,可以从返回的信息中获取相关的下载结果信息,并进行相应处理。通过记录已完成的请求数量,可以判断是否所有请求都已经完成。
foreach ($urls as $url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 添加错误处理 curl_setopt($ch, CURLOPT_FAILONERROR, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_multi_add_handle($mh, $ch); $handles[] = $ch; }
在上述代码中,通过设置 CURLOPT_FAILONERROR
选项为 true,可以在请求出错时抛出异常。同时,通过设置合理的 CURLOPT_CONNECTTIMEOUT
和 CURLOPT_TIMEOUT
Dans le code de téléchargement HTTP asynchrone ci-dessus, les résultats du téléchargement seront ignorés, quel que soit le succès ou l'échec. Afin de mieux gérer les résultats du téléchargement, vous pouvez obtenir les informations de chaque requête via la fonction curl_multi_info_read()
. Voici un exemple de code :
curl_multi_info_read()
est utilisée pour vérifier si une requête a été terminée. S'il existe une demande terminée, les informations pertinentes sur le résultat du téléchargement peuvent être obtenues à partir des informations renvoyées et traitées en conséquence. En enregistrant le nombre de demandes terminées, vous pouvez déterminer si toutes les demandes ont été complétées. 🎜CURLOPT_FAILONERROR
sur true, vous pouvez lever une exception lorsque la requête échoue. Dans le même temps, en définissant des options CURLOPT_CONNECTTIMEOUT
et CURLOPT_TIMEOUT
raisonnables, vous pouvez définir la connexion et demander un délai d'attente pour éviter les échecs de téléchargement causés par le délai d'attente. 🎜🎜Résumé🎜La technique d'utilisation du HTTP asynchrone PHP pour télécharger plusieurs fichiers peut considérablement améliorer l'efficacité du téléchargement et l'expérience utilisateur. En utilisant correctement la bibliothèque d'extensions cURL, plusieurs requêtes HTTP peuvent être lancées simultanément pour maximiser l'utilisation de la bande passante du réseau. Dans le même temps, les situations anormales sont traitées de manière raisonnable pour garantir la stabilité et la fiabilité des téléchargements. Grâce à ces compétences en développement, nous pouvons gérer plus efficacement les exigences de téléchargement de grandes quantités de fichiers dans les projets réels. 🎜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!