首页 >php教程 >php手册 >php header()函数实现文件下载的文件,提示被破坏不能打开

php header()函数实现文件下载的文件,提示被破坏不能打开

WBOY
WBOY原创
2016-05-26 08:21:411013浏览

最近一客户反映他们网站上所有的图片下载不了了,下载下来的图片都提示文件被破坏,直接导致打不开,作者测试了下发现确实有这个问题,仔细看了下源代码,发现问题的根源在fread这个函数,fread函数的第二个参数是设置读取最大的字节数.

经试验发现fread函数单次最大能够读取的字节数是有限制的,仅为8192个字节,即8KB,对于超过这个大小的文件,如果要完整读取,则需要循环读取直至文件结尾,综合以上做了些改正,以下代码是休整之后的代码,经测试问题解决.

PHP实例代码如下:

<?php
function download($file_url, $new_name = &#39;&#39;) {
    if (!isset($file_url) || trim($file_url) == &#39;&#39;) {
        return &#39;500&#39;;
    }
    if (!file_exists($file_url)) { //检查文件是否存在
        return &#39;404&#39;;
    }
    $file_name = basename($file_url);
    $file_type = explode(&#39;.&#39;, $file_url);
    $file_type = $file_type[count($file_type) - 1];
    $file_name = trim($new_name == &#39;&#39;) ? $file_name : urlencode($new_name) . &#39;.&#39; . $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);
}

               
               

本文地址:

转载随意,但请附上文章地址:-)

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn