php 根据URL下载远程图片、压缩包、pdf等文件到本地

这篇文章主要介绍了php 根据URL下载远程图片、压缩包、pdf等文件到本地 ,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下。

1、此方法可以下载图片、压缩包、pdf(亲测),应该所有类型的文件都可以下载到本地,可以试一下

  1. //远程路径,名称,文件后缀
  2. function downImgRar($url,$rename,$ext){
  3. switch ($ext) {
  4. case 'jpg': //下载图片
  5. $file_path = 'uploads/images/';
  6. break;
  7. case 'png': //下载图片
  8. $file_path = 'uploads/images/';
  9. break;
  10. case 'pdf': //下载PDF
  11. $file_path = 'uploads/pdf/';
  12. break;
  13. case 'rar': //下载压缩包
  14. $file_path = 'uploads/rar/';
  15. break;
  16. case 'zip': //下载压缩包
  17. $file_path = 'uploads/rar/';
  18. break;
  19. default:
  20. $file_path = 'uploads/files/';
  21. break;
  22. }
  23. $ch = curl_init($url);
  24. curl_setopt($ch, CURLOPT_HEADER, 0);
  25. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  26. curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
  27. $rawdata=curl_exec ($ch);
  28. curl_close ($ch);
  29. // 使用中文文件名需要转码
  30. $fp = fopen($file_path.iconv('UTF-8', 'GBK', $rename).".".$ext,'w');
  31. fwrite($fp, $rawdata);
  32. fclose($fp);
  33. // 返回路径
  34. return $_SERVER['DOCUMENT_ROOT'].$file_path.$rename.".".$ext;
  35. }

2、下载压缩文件,这个只可以下载压缩文件

  1. // 下载压缩包
  2. function downRar($file_path)
  3. {
  4. $file_name = '/uploads/rar/2009323162920-维C银翘片说明书.rar';
  5. $file_name = iconv("utf-8","gbk//IGNORE",$file_name); // 特别注意!特别注意!特别注意这里,windows下必须开转码,不然直接文件不存
  6. $file_path = $_SERVER['DOCUMENT_ROOT'] . $file_name;// 比如windows下这里我的是 "D:/web/public/uploads/rar/2009323162920-维C银翘片说明书.rar"
  7. //判断如果文件存在,则跳转到下载路径
  8. if (!file_exists($file_path)) {
  9. die("文件不存在!");
  10. }
  11. $fp = fopen($file_path, "r+") or die('打开文件错误'); //下载文件必须要将文件先打开。写入内存
  12. $file_size = filesize($file_path);
  13. //返回的文件流
  14. Header("Content-type:application/octet-stream");
  15. //按照字节格式返回
  16. Header("Accept-Ranges:bytes");
  17. //返回文件大小
  18. Header("Accept-Length:" . $file_size);
  19. //弹出客户端对话框,对应的文件名
  20. Header("Content-Disposition:attachment;filename=" . substr($file_name, strrpos($file_name, '/') + 1));
  21. //防止服务器瞬间压力增大,分段读取
  22. $buffer = 1024;
  23. while (!feof($fp)) {
  24. $file_data = fread($fp, $buffer);
  25. echo $file_data;
  26. }
  27. fclose($fp);
  28. die("下载成功!");
  29. }