當前位置:編程學習大全網 - 源碼下載 - PHP文件下載文件損壞的問題

PHP文件下載文件損壞的問題

經過簡單測試,下載大文件(>50M)時會出現,斷節問題,還有對中文名字的文件支持不好,甚至返回404,下載的文件打不開也許是因為沒有判斷是否讀取完,因為 fread不壹定能壹次性將壹個文件讀入內存,這樣服務器有壓力,服務器為了穩定可能對該內存區進行了優化,下面貼上我修改的代碼,寫的不好望指正,***同進步:

function?download($file_url,$new_name=''){

$file_url=iconv('utf-8','gb2312',$file_url);?

//將編碼轉為支持中英文的gb2312編碼

if(!isset($file_url)||trim($file_url)==''){

return?'500';

}

if(!file_exists($file_url)){?//檢查文件是否存在

return?'404';

}

$file_name=basename($file_url);

$file_type=explode('.',$file_url);

$file_type=$file_type[count($file_type)-1];

$file_name=trim($new_name=='')?$file_name:urlencode($new_name).'.'.$file_type;

//輸入文件標簽

header("Content-type:?application/octet-stream");

header("Accept-Ranges:?bytes");

header("Accept-Length:?".filesize($file_url));

header("Content-Disposition:?attachment;?filename=".$file_name);

$file_type=fopen($file_url,'r');?//打開文件

//輸出文件內容

$file_size=filesize($file_url);//獲取文件大小

?$buffer=1024;//定義1KB的緩存空間

$file_count=0;?//計數器,計算發送了多少數據

while(!feof($file_type)?&&?($file_size>$file_count)){?

//如果文件還沒讀到結尾,且還有數據沒有發送?

$senddata=fread($file_type,$buffer);

//讀取文件內容到緩存區

$file_count+=$senddata;

echo?$senddata;

}

//echo?fread($file_type,filesize($file_url));

fclose($file_type);

}

//最主要的原因找到了,保存PHP源碼時要用UTF-8 無ROM格式編碼保存,否則每個文件頭部都會有? EF? BB? 這兩個字節

  • 上一篇:2022跨年祝福語給暗戀的人
  • 下一篇:孕婦吸氧後胎動頻繁正常嗎?
  • copyright 2024編程學習大全網