ホームページ > バックエンド開発 > PHPチュートリアル > 上载有关问题,小文件上载正常,上载大于100M的文件,进度条到100M以外的时候,进度条就不走了,代码什么地方出有关问题了

上载有关问题,小文件上载正常,上载大于100M的文件,进度条到100M以外的时候,进度条就不走了,代码什么地方出有关问题了

WBOY
リリース: 2016-06-13 11:05:49
オリジナル
841 人が閲覧しました

下载问题,小文件下载正常,下载大于100M的文件,进度条到100M以外的时候,进度条就不走了,代码什么地方出问题了?

本帖最后由 bxline 于 2012-12-17 06:31:43 编辑 我用的是下面的代码,我试验了两回一次下载到145M不走了,一次下载到129M就不走了
,这是怎么回事?小文件下载正常,就是大于100M的文件不正常
下面是代码:我是03+FASTCGI,不是apache,所以代码中有的行给注释掉了

if(file_exists($filename)){
$mtime = ($mtime = filemtime($filename)) ? $mtime : gmtime(); 
$size = intval(sprintf("%u", filesize($filename))); 
#if (intval($size + 1) > return_bytes(ini_get('memory_limit')) && intval($size * 1.5) #  ini_set('memory_limit', intval($size * 1.5)); 
#} 
[email protected]_setenv('no-gzip', 1); 
[email protected]_set('zlib.output_compression', 0);
header('Content-Description: File Transfer');
header('Content-Type: application/force-download');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($filename));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header("Content-Length: " . $size); 
set_time_limit(300); 
$chunksize = 1 * (1024 * 1024);
 //   ob_clean();
   // flush();
if ($size > $chunksize) { 
    $handle = fopen($filename, 'rb'); 
    $buffer = ''; 
  while (!feof($handle)) { 
    $buffer = fread($handle, $chunksize); 
    echo $buffer; 
    ob_flush(); 
    flush(); 
  } 
  fclose($handle); 
} else { 
ob_flush(); 
    flush(); 
    readfile($filename); 

  exit;
}
------解决方案--------------------
echo 100 * 1024 / 300;
得 341 K/s
即需要平均带宽为 3M 以上

你的下载代码不具有断点续传能力,一旦出现传输错误,即可终止
------解决方案--------------------
我该写了一下,你看看
<br>Function down($file){<br>    IF(!$file Or !File_Exists($file) Or !Is_Readable($file)) {Return False;}<br><br>    IF($f = atr($file)) {<br>        Header("Content-Length:{$f['size']}");<br>        Header('Content-Description:File Transfer');<br>        Header('Content-Transfer-Encoding:binary');<br>        Header('Expires:0');<br>        Header('Cache-Control:must-revalidate');<br>        Header('Pragma:public');<br> <br>        IF(Function_exists("mime_content_type")) {<br>            Header("Content-Type: ".mime_content_type($f['name']));<br>        }Else{<br>            Header("Content-Type: application/octet-stream");<div class="clear">
                 
              
              
        
            </div>
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート