判断服务器上文件是否存在问题

WBOY
풀어 주다: 2016-06-06 20:12:35
원래의
1237명이 탐색했습니다.

我用的是file_exists函数判断文件是否存在,可奇怪的是如果我只判断文件的目录是否存在返回true,只要一加上文件名就返回false(文件是确实存在的)求教这是为什么?

<code>public function download($file_url){   
        if(!isset($file_url)||trim($file_url)==''){
            echo '路径不正确';exit;
        }
        $filename=$this->get_basename($file_url);       

        $file_name = preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/","",$filename);       //去掉文件名中的空格。
        $file_name = iconv("UTF-8","GB2312",urldecode($file_name)) ;                //取文件名称,将urlcode编码转回来
        $filename = str_replace( '+', '%20', urlencode($filename) ) ;               //解决urlcode编码空格问题。
        
        //这一步 我把生成的$file 打印出来放在url里回车 直接下载 可是就是在判断文件是否存在哪里一直不通过
        $file = dirname(base_url($file_url)).'/'.$filename  ;
        
        $file = fopen($file,"r");
        if (!$file) { 
            echo "文件找不到"; 
        } else { 
            header("Content-type: application/octet-stream");
            //header("Accept-Ranges: bytes");
            //header("Accept-Length: ".filesize($file_url));
            Header("Content-Disposition: attachment; filename=" . trim($file_name)); 
            while (!feof ($file)) { 
                echo fread($file,50000); 
            } 
            fclose ($file); 
        } 
    }</code>
로그인 후 복사
로그인 후 복사

回复内容:

我用的是file_exists函数判断文件是否存在,可奇怪的是如果我只判断文件的目录是否存在返回true,只要一加上文件名就返回false(文件是确实存在的)求教这是为什么?

<code>public function download($file_url){   
        if(!isset($file_url)||trim($file_url)==''){
            echo '路径不正确';exit;
        }
        $filename=$this->get_basename($file_url);       

        $file_name = preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/","",$filename);       //去掉文件名中的空格。
        $file_name = iconv("UTF-8","GB2312",urldecode($file_name)) ;                //取文件名称,将urlcode编码转回来
        $filename = str_replace( '+', '%20', urlencode($filename) ) ;               //解决urlcode编码空格问题。
        
        //这一步 我把生成的$file 打印出来放在url里回车 直接下载 可是就是在判断文件是否存在哪里一直不通过
        $file = dirname(base_url($file_url)).'/'.$filename  ;
        
        $file = fopen($file,"r");
        if (!$file) { 
            echo "文件找不到"; 
        } else { 
            header("Content-type: application/octet-stream");
            //header("Accept-Ranges: bytes");
            //header("Accept-Length: ".filesize($file_url));
            Header("Content-Disposition: attachment; filename=" . trim($file_name)); 
            while (!feof ($file)) { 
                echo fread($file,50000); 
            } 
            fclose ($file); 
        } 
    }</code>
로그인 후 복사
로그인 후 복사

可能是你的文件夹或者文件的权限问题

应该是你用dirname()的时候返回的路径问题,可以移除结果里面最左边的'/'

fopen要求文件名就是实际的文件名,而你的$filename变量是urlencode的值,所以打不开,却可以下载

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