最近一客户反映他们网站上所有的图片下载不了了,下载下来的图片都提示文件被破坏,直接导致打不开,作者测试了下发现确实有这个问题,仔细看了下源代码,发现问题的根源在fread这个函数,fread函数的第二个参数是设置读取最大的字节数.
经试验发现fread函数单次最大能够读取的字节数是有限制的,仅为8192个字节,即8KB,对于超过这个大小的文件,如果要完整读取,则需要循环读取直至文件结尾,综合以上做了些改正,以下代码是休整之后的代码,经测试问题解决.
PHP实例代码如下:
<?php 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; //输入文件标签 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); }
本文地址:
转载随意,但请附上文章地址:-)