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

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

WBOY
풀어 주다: 2016-05-26 08:21:41
원래의
1010명이 탐색했습니다.

最近一客户反映他们网站上所有的图片下载不了了,下载下来的图片都提示文件被破坏,直接导致打不开,作者测试了下发现确实有这个问题,仔细看了下源代码,发现问题的根源在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);
}
로그인 후 복사

               
               

本文地址:

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

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿