欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-08-20 15:05:27
1、此方法可以下载图片、压缩包、pdf(亲测),应该所有类型的文件都可以下载到本地,可以试一下 2、下载压缩文件,这个只可以下载压缩文件 ......

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("下载成功!");
}