php 根据URL下载远程图片、压缩包、pdf等文件到本地
1、此方法可以下载图片、压缩包、pdf(亲测),应该所有类型的文件都可以下载到本地,可以试一下
//远程路径,名称,文件后缀 function downImgRar($url,$rename,$ext){ switch ($ext) { case 'jpg': //下载图片 $file_path = 'uploads/images/'; break; case 'png': //下载图片 $file_path = 'uploads/images/'; break; case 'pdf': //下载PDF $file_path = 'uploads/pdf/'; break; case 'rar': //下载压缩包 $file_path = 'uploads/rar/'; break; case 'zip': //下载压缩包 $file_path = 'uploads/rar/'; break; default: $file_path = 'uploads/files/'; break; } $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_BINARYTRANSFER,1); $rawdata=curl_exec ($ch); curl_close ($ch); // 使用中文文件名需要转码 $fp = fopen($file_path.iconv('UTF-8', 'GBK', $rename).".".$ext,'w'); fwrite($fp, $rawdata); fclose($fp); // 返回路径 return $_SERVER['DOCUMENT_ROOT'].$file_path.$rename.".".$ext; }
2、下载压缩文件,这个只可以下载压缩文件
// 下载压缩包 function downRar($file_path) { $file_name = '/uploads/rar/2009323162920-维C银翘片说明书.rar'; $file_name = iconv("utf-8","gbk//IGNORE",$file_name); // 特别注意!特别注意!特别注意这里,windows下必须开转码,不然直接文件不存 $file_path = $_SERVER['DOCUMENT_ROOT'] . $file_name;// 比如windows下这里我的是 "D:/web/public/uploads/rar/2009323162920-维C银翘片说明书.rar" //判断如果文件存在,则跳转到下载路径 if (!file_exists($file_path)) { die("文件不存在!"); } $fp = fopen($file_path, "r+") or die('打开文件错误'); //下载文件必须要将文件先打开。写入内存 $file_size = filesize($file_path); //返回的文件流 Header("Content-type:application/octet-stream"); //按照字节格式返回 Header("Accept-Ranges:bytes"); //返回文件大小 Header("Accept-Length:" . $file_size); //弹出客户端对话框,对应的文件名 Header("Content-Disposition:attachment;filename=" . substr($file_name, strrpos($file_name, '/') + 1)); //防止服务器瞬间压力增大,分段读取 $buffer = 1024; while (!feof($fp)) { $file_data = fread($fp, $buffer); echo $file_data; } fclose($fp); die("下载成功!"); }
3.下载远程图片
public function downimg() { $path = 'E:/phpstudy_pro/WWW/pachong/public/uploads/img/'; $img ="https://zy.yaozh.com/instruct/imagesout/TB1_wMKSpXXXXalXXXXXXXXXXXX_!!0-item_pic.jpg_430x430q90.jpg" ; ob_clean(); ob_start(); readfile($img); //读取图片 $img = ob_get_contents(); //得到缓冲区中保存的图片 ob_end_clean(); //清空缓冲区 $fp = fopen($path.'test.jpg','w'); //写入图片 if(fwrite($fp,$img)) { fclose($fp); echo "图片保存成功"; }else{ echo "图片保存失败"; } }
——现在的努力,只为小时候吹过的牛逼! ——