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

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

WBOY
Release: 2016-05-26 08:21:41
Original
1005 people have browsed it

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

               
               

本文地址:

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

Related labels:
php
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template