PHP利用Curl 多线程抓取下载文件

2014年06月23日 02:10 by:一品光猪

PHP 利用Curl Multi Functions 它可以实现并发多线程的访问下载文件。

php实现多线程下载的实例:

  1. <?php
  2. $urls = array(
  3. 'http://www.example.com/mp3/1.mp3',
  4. 'http://www.example.com/mp3/2.mp3',
  5. 'http://www.example.com/mp3/3.mp3',
  6. 'http://www.example.com/mp3/4.mp3',
  7. 'http://www.example.com/mp3/5.mp3',
  8. 'http://www.example.com/mp3/6.mp3',
  9. 'http://www.example.com/mp3/7.mp3',
  10. 'http://www.example.com/mp3/8.mp3',
  11. );
  12.  
  13. $save_to='/home/pipi/mp3/';
  14.  
  15. $mh = curl_multi_init();
  16. foreach ($urls as $i => $url) {
  17.     $g = $save_to.basename($url);
  18.     if(!is_file($g)){
  19.         $conn[$i] = curl_init($url);
  20.         $fp[$i] = fopen ($g, "w");
  21.         curl_setopt($conn[$i], CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)");
  22.         curl_setopt($conn[$i], CURLOPT_FILE, $fp[$i]);
  23.         curl_setopt($conn[$i], CURLOPT_HEADER ,0);
  24.         curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT,60);
  25.         curl_multi_add_handle ($mh,$conn[$i]);
  26.     }
  27. }
  28. do {
  29.     $n = curl_multi_exec($mh,$active);
  30. }
  31. while ($active);
  32. foreach ($urls as $i => $url) {
  33.     curl_multi_remove_handle($mh,$conn[$i]);
  34.     curl_close($conn[$i]);
  35.     fclose($fp[$i]);
  36. }
  37. curl_multi_close($mh);
  38. ?>