> 백엔드 개발 > PHP 튜토리얼 > PHP 파일 다운로드 기능에서 다운로드한 파일의 크기가 서버 소스 파일의 크기와 일치하지 않습니다.

PHP 파일 다운로드 기능에서 다운로드한 파일의 크기가 서버 소스 파일의 크기와 일치하지 않습니다.

WBOY
풀어 주다: 2016-08-04 09:19:01
원래의
2117명이 탐색했습니다.

1. 인터넷에서 파일을 다운로드하는 기능을 기반으로

<code>    public function putFile($file_dir, $file_name){
        $file_dir = chop($file_dir);//去掉路径中多余的空格
        //得出要下载的文件的路径
        if($file_dir != '')
        {
            $file_path = $file_dir;
            if(substr($file_dir,strlen($file_dir)-1,strlen($file_dir)) != '/')
                $file_path .= '/';
            $file_path .= $file_name;
        }
        else
            $file_path = $file_name;

        //判断要下载的文件是否存在
        if(!file_exists($file_path))
        {
         //   alert('对不起,你要下载的文件不存在');
            return false;
        }

        $file_size = filesize($file_path);

        header("Content-type: application/octet-stream;charset=gbk");
        header("Accept-Ranges: bytes");
        header("Accept-Length: $file_size");
        header("Content-Disposition: attachment; filename=".$file_name);

        $fp = fopen($file_path,"r");
        $buffer_size = 1024;
        $cur_pos = 0;

        while(!feof($fp)&&$file_size-$cur_pos>$buffer_size)
        {
            $buffer = fread($fp,$buffer_size);
            echo $buffer;
            $cur_pos += $buffer_size;
        }

        $buffer = fread($fp,$file_size-$cur_pos);
        echo $buffer;
        fclose($fp);
        return true;
    }</code>
로그인 후 복사
로그인 후 복사

확실히 같은 파일인데 다운로드한 파일이 원본 파일보다 작게 보이는 이유는 무엇인가요?

답글 내용:

1. 인터넷에서 파일을 다운로드하는 기능을 기반으로

<code>    public function putFile($file_dir, $file_name){
        $file_dir = chop($file_dir);//去掉路径中多余的空格
        //得出要下载的文件的路径
        if($file_dir != '')
        {
            $file_path = $file_dir;
            if(substr($file_dir,strlen($file_dir)-1,strlen($file_dir)) != '/')
                $file_path .= '/';
            $file_path .= $file_name;
        }
        else
            $file_path = $file_name;

        //判断要下载的文件是否存在
        if(!file_exists($file_path))
        {
         //   alert('对不起,你要下载的文件不存在');
            return false;
        }

        $file_size = filesize($file_path);

        header("Content-type: application/octet-stream;charset=gbk");
        header("Accept-Ranges: bytes");
        header("Accept-Length: $file_size");
        header("Content-Disposition: attachment; filename=".$file_name);

        $fp = fopen($file_path,"r");
        $buffer_size = 1024;
        $cur_pos = 0;

        while(!feof($fp)&&$file_size-$cur_pos>$buffer_size)
        {
            $buffer = fread($fp,$buffer_size);
            echo $buffer;
            $cur_pos += $buffer_size;
        }

        $buffer = fread($fp,$file_size-$cur_pos);
        echo $buffer;
        fclose($fp);
        return true;
    }</code>
로그인 후 복사
로그인 후 복사

확실히 같은 파일인데 다운로드한 파일이 원본 파일보다 작게 보이는 이유는 무엇인가요?

시스템마다 차이가 있는 것은 정상입니다

작성하기가 너무 복잡할수록 실수하기 쉽습니다. 길이 관리에 문제가 있는지는 잘 모르겠습니다.

<code>$fp = fopen($file_path,"r");
$content = '';
while($_content = fread($fp, 1024)) $content.= $_content;
fclose($fp);</code>
로그인 후 복사

파일이 100바이트에 불과한 경우 fread($fp, 1024)는 1024바이트를 얻지 못합니다.

그리고... charset=gbk도 없애야 하고, 인코딩을 따로 지정할 필요도 없을 것 같아요.

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