Compétences avancées : partage d'expérience de développement HTTP asynchrone PHP pour le téléchargement de plusieurs fichiers
Introduction :
Dans le développement Web moderne, nous rencontrons souvent le besoin de télécharger plusieurs fichiers à partir du serveur. Pour les tâches de téléchargement d'un grand nombre de fichiers, la méthode de téléchargement synchrone traditionnelle entraînera de sérieux problèmes de performances. Pour résoudre ce problème, nous pouvons utiliser la fonction de téléchargement HTTP asynchrone de PHP pour gérer efficacement le téléchargement de plusieurs fichiers.
2.1 Gestion de plusieurs demandes de téléchargement
Lors du téléchargement de plusieurs fichiers, nous devons gérer plusieurs demandes de téléchargement. En utilisant l'extension cURL, nous pouvons créer un tableau de plusieurs handles cURL, chaque handle correspondant à une demande de téléchargement.
2.2 Définir les options de téléchargement
Lors de la création d'un handle cURL, nous pouvons définir certaines options, telles que l'URL, le délai d'attente, les en-têtes de requête, etc. Une fois que vous avez défini vos options de téléchargement, vous pouvez envoyer une demande de téléchargement.
2.3 Traitement de la réponse au téléchargement
Lorsque le serveur répond à la demande de téléchargement, nous pouvons traiter les données téléchargées en enregistrant une fonction de rappel. L'extension cURL fournit l'option CURLOPT_WRITEFUNCTION
où nous pouvons spécifier une fonction de rappel pour gérer les données de réponse.
<?php // 创建cURL多个句柄数组 $curlHandles = array(); // 创建多个下载请求 $urls = array( "http://example.com/file1", "http://example.com/file2", "http://example.com/file3" ); foreach ($urls as $url) { $handle = curl_init($url); curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); curl_setopt($handle, CURLOPT_WRITEFUNCTION, function($handle, $data) { // 处理下载数据 // ... return strlen($data); }); $curlHandles[] = $handle; } // 初始化多个cURL批处理句柄 $mh = curl_multi_init(); // 添加多个cURL句柄到批处理句柄中 foreach ($curlHandles as $handle) { curl_multi_add_handle($mh, $handle); } // 执行多个下载请求 $runningHandles = null; do { $status = curl_multi_exec($mh, $runningHandles); } while ($status === CURLM_CALL_MULTI_PERFORM || $runningHandles); // 关闭多个cURL句柄 foreach ($curlHandles as $handle) { curl_multi_remove_handle($mh, $handle); curl_close($handle); } // 关闭cURL批处理句柄 curl_multi_close($mh);
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!