如何解决php大文件无法下载的问题-PHP问题

资源魔 40 0

php年夜文件无奈下载的处理方法:起首取得要下载的文件名;而后经过“set_time_limit(0);”办法设置剧本的最年夜执行工夫;最初肃清缓存便可。

保举:《PHP视频教程》

比来正在做一个照片下载零碎,需求把主顾相片下载上去,而后进行ps修图,然而下载的文件要求是相机的原始文件cr2的文件。这类类型的文件普通比拟年夜,普通一张相片的过小是30M阁下,过后下载实现后,也没留意,如今反响零碎下载上去的照片,photoshop 无奈关上,一开端认为是软件不装置camera Raw 插件,起初装置了后,发现仍是打没有开,最初把下载上去的图片以及上传前的图片一比照,下载的照片比原图小不少,这时候发现极可能呈现下载图片没有完好的景象,一顿baidu搜寻,发现原来是php剧本执行工夫的成绩。普通默许是30秒,设置个设置装备摆设后处理成绩。

set_time_limit(0); 代表没有限度工夫,好了上面贴出本人的下载代码。这个函数各人能够间接应用

//fname为要下载的文件名
//$fpath为下载文件所正在文件夹,默许是downlod
function download($fpath="download/"){
    //取得要下载的文件名
    $pathinfo=pathinfo($fpath);
 
    $filename=$pathinfo['filename'].'.'.$pathinfo['extension'];
 
 
    //防止中文文件名呈现检测没有到文件名的状况,进行转码utf-8->gbk
//    $filename=iconv('utf-8', 'gb2312', $fname);
    $downpath=$fpath;
    if(!file_exists($downpath)){//检测文件能否存正在
        echo "文件没有存正在!";
        die();
    }
    //    //设置剧本的最年夜执行工夫,设置为0则无工夫限度
    set_time_limit(0);
    $fp=fopen($downpath,'rb');//只读形式关上
    $filesize=filesize($downpath);//文件巨细
//    echo $filesize;
//    die;
    //前往的文件(流方式)
    header("Content-type: application/octet-stream");
    //依照字节巨细前往
    header("Accept-Ranges: bytes");
    //前往文件巨细
    header("Accept-Length: $filesize");
    //这里客户真个弹出对话框,对应的文件名
    header("Content-Disposition: attachment; filename=".$filename);
    //肃清缓存
    ob_clean();
    flush();
    //设置分流
    $buffer=4096;
    //来个文件字节计数器
    $count=0;
    while(!feof($fp)&&($filesize-$count>0)){
        //设置文件最长执行工夫
        set_time_limit(0);
        $data=fread($fp,$buffer);
        $count+=$data;//计数
        echo $data;//传数据给阅读器端
    }
 
    fclose($fp);
 
}

  心愿能协助各人处理成绩

以上就是若何处理php年夜文件无奈下载的成绩的具体内容,更多请存眷资源魔其它相干文章!

标签: php php教程 php故障解决 php使用问题

抱歉,评论功能暂时关闭!