Maison  >  Article  >  développement back-end  >  Comment résoudre le problème selon lequel les gros fichiers php ne peuvent pas être téléchargés

Comment résoudre le problème selon lequel les gros fichiers php ne peuvent pas être téléchargés

藏色散人
藏色散人original
2020-10-15 10:52:162993parcourir

La solution au problème selon lequel les gros fichiers PHP ne peuvent pas être téléchargés : obtenez d'abord le nom du fichier à télécharger ; puis définissez le temps d'exécution maximum du script via la méthode "set_time_limit(0);" vider le cache.

Comment résoudre le problème selon lequel les gros fichiers php ne peuvent pas être téléchargés

Recommandé : "Tutoriel vidéo PHP"

Je travaille actuellement sur un système de téléchargement de photos et j'ai besoin de télécharger photos du client Descendez, puis effectuez une retouche photo PS, mais le fichier téléchargé doit être le fichier CR2 d'origine de l'appareil photo. Ce type de fichier est généralement relativement volumineux. Généralement, une photo est trop petite, environ 30 Mo. Je n'y ai pas prêté attention une fois le téléchargement terminé. Désormais, les photos téléchargées par le système de réaction ne peuvent pas être ouvertes par Photoshop. Au début, j'ai pensé que c'était parce que Camera Raw n'était pas installé dans le logiciel. Après avoir installé le plug-in, j'ai constaté qu'il ne pouvait toujours pas être ouvert. Enfin, j'ai comparé l'image téléchargée avec l'image téléchargée. beaucoup plus petite que l'image originale. À ce moment-là, j'ai trouvé que l'image téléchargée était probablement incomplète. Après une recherche sur Baidu, j'ai découvert qu'il s'agissait d'un problème avec le temps d'exécution du script PHP. La valeur par défaut est de 30 secondes et le problème peut être résolu après avoir défini une configuration.

set_time_limit(0); signifie aucune limite de temps, je publierai donc mon code de téléchargement ci-dessous. Vous pouvez utiliser cette fonction directement

//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);
 
}

J'espère qu'elle pourra vous aider à résoudre le problème

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn