PHP 中 使用curl 或 fsockopen 下载远程文件

作者:阿圣(Sfan) 发布于:2009-8-5 14:18 Wednesday 分类:Web

curl方法:

 

 

  1. set_time_limit(0);  
  2. ini_set(’display_errors’,true);//Just in case we get some errors, let us know….   
  3. $host = “www.example.net”;  
  4. $urls=array(  
  5. “http://$host/xxx/xxx.jpg”,  
  6. “http://$host/xxx/yyy.jpg”  
  7. );   
  8. $save_to=’./’;   
  9. $mh = curl_multi_init();   
  10. foreach ($urls as $i => $url)  
  11. {  
  12. $g=$save_to.basename($url);  
  13. if(!is_file($g))  
  14. {  
  15. $conn[$i]=curl_init($url);  
  16. $fp[$i]=fopen ($g, “wb”);   
  17. curl_setopt($conn[$i], CURLOPT_USERAGENT, “Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-CN; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1″);  
  18. curl_setopt($conn[$i], CURLOPT_REFERER, “http://$host”);  
  19. curl_setopt($conn[$i], CURLOPT_FILE, $fp[$i]);  
  20. curl_setopt($conn[$i], CURLOPT_HEADER ,0);  
  21. curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT,600);  
  22. curl_setopt($conn[$i], CURLOPT_FOLLOWLOCATION, 1);  
  23. //curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, 0);  
  24. //curl_setopt($conn[$i], CURLOPT_VERBOSE, 0);  
  25.  
  26. curl_multi_add_handle ($mh,$conn[$i]);  
  27. }  
  28. }  
  29. do {  
  30. $n=curl_multi_exec($mh,$active);  
  31. }while ($active);  
  32. foreach ($urls as $i => $url)  
  33. {  
  34. curl_multi_remove_handle($mh,$conn[$i]);  
  35. curl_close($conn[$i]);  
  36. fclose ($fp[$i]);  
  37. }  
  38. curl_multi_close($mh);  
  39.  

fsockopen方法

 

  1. $url = “http://www.example.net/xxx/xxx.jpg”;  
  2. $t = parse_url($url);  
  3. $host = $t['host'];  
  4. $file = $t['path'];   
  5. $fp = fsockopen($host,80, $errno$errstr, 30);  
  6. if($fp)  
  7. {   
  8. $header = “GET $file HTTP/1.1\r\n”;  
  9. $header .= “Host: $host\r\n”;  
  10. $header .= “User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-CN; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1\r\n”;  
  11. $header .= “Referer: http://$host\r\n”;  
  12. $header .= “Connection: Close\r\n\r\n”;   
  13. fwrite($fp$header);   
  14. $jpg = fopen($path . basename($file), “wb”);  
  15. while (!feof($fp))  
  16. {  
  17. $s = fgets($fp,128);  
  18. fwrite($jpg,$s);  
  19. }  
  20. fclose($jpg);  
  21. fclose($fp);  

 

标签: PHP

et_highlighter

发表评论:

Powered by emlog 湘ICP备08103487号