判斷伺服器上檔案是否存在問題

來源:互聯網
上載者:User
關鍵字 php
我用的是 file_exists函數判斷檔案是否存在,可奇怪的是如果我只判斷 檔案的目錄是否存在返回true,只要一加上檔案名稱就返回false(檔案是確實存在的)求教這是為什嗎?

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|\ \;| |\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);         }     }

回複內容:

我用的是file_exists函數判斷檔案是否存在,可奇怪的是如果我只判斷檔案的目錄是否存在返回true,只要一加上檔案名稱就返回false(檔案是確實存在的)求教這是為什嗎?

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|\ \;| |\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);         }     }

可能是你的檔案夾或者檔案的許可權問題

應該是你用dirname()的時候返回的路徑問題,可以移除結果裡面最左邊的'/'

fopen要求檔案名稱就是實際的檔案名稱,而你的$filename變數是urlencode的值,所以打不開,卻可以下載

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.