程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php用header()實現文件下載,下載的文件提示被破壞不能打開的解決辦法

php用header()實現文件下載,下載的文件提示被破壞不能打開的解決辦法

編輯:關於PHP編程

本站以前分享過一個文件下載的函數,具體文章連接地址如下:

PHP文件下載函數(代碼)

最近一客戶反映他們網站上所有的圖片下載不了了,下載下來的圖片都提示文件被破壞,直接導致打不開,作者測試了下發現確實有這個問題,仔細看了下源代碼,發現問題的根源在fread這個函數,fread函數的第二個參數是設置讀取最大的字節數,經試驗發現fread函數單次最大能夠讀取的字節數是有限制的,僅為8192個字節,即8KB,對於超過這個大小的文件,如果要完整讀取,則需要循環讀取直至文件結尾。綜合以上做了些改正,以下代碼是休整之後的代碼,經測試問題解決。

function download($file_url,$new_name=''){
	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;
	//輸入文件標簽phpernote
	header("Content-type: application/octet-stream");
	header("Accept-Ranges: bytes");
	header("Accept-Length: ".filesize($file_url));
	header("Content-Disposition: attachment; filename=".$file_name);
	//輸出文件內容
	@readfile($file_type);
}

您可能感興趣的文章

  • 利用SecureCRT上傳、下載文件(使用sz與rz命令)
  • hosts文件位置以及如何打開hosts文件
  • PHP分析文件頭信息判斷上傳文件的類型
  • php清空(刪除)指定目錄下的文件,不刪除目錄文件夾的方法
  • PHP 利用 Curl Functions 實現多線程抓取網頁和下載文件
  • PHP文件下載函數(代碼)
  • php限制文件下載速度的功能
  • 鼠標移動到文字上出現浮層提示特效(兼容IE,火狐等所有浏覽器)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved