本站以前分享過一個文件下載的函數,具體文章連接地址如下:
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); }