PHP中一般使用file_exists()判斷某個檔案或資料夾是否存在,若檔案或資料夾存在則傳回true,不存在則傳回false。今天在實現文件下載功能時發現,在網頁使用UTF8編碼的情況下,該函數無法檢測包含中文的文件是否存在,並始終返回false。修改很久之後才發現是因為沒有把完整路徑進行編碼的原因,僅僅對檔案名稱進行轉碼是不夠的。
下方的程式碼無法偵測包含中文的檔案是否存在,無論檔案是否在都回傳false:
<?php; $file='../uploads/file/中文.pdf'; // 在../uploads/file/文件夹中 中文.pdf 实际存在 echo file_exists($file); //输出为false ?>
僅僅對檔案名稱進行轉碼也不行,這就是我所遇到的這種情況,需要把我遇到的這種情況,這需要【路徑+檔名】一起轉碼才可以
<?php $file= '中文.pdf'; // 在../uploads/file/文件夹中 中文.pdf 实际存在 $file=iconv('UTF-8','GB2312',$file); echo file_exists('../uploads/file/' . $file); //输出为false ?>
實際上,只要把文件路徑與文件名字從UTF8編碼轉換為GB2312編碼,改進後就可以準確判斷了:
<?php $file='../uploads/file/中文.pdf'; // 在../uploads/file/文件夹中 中文.pdf 实际存在 $file=iconv('UTF-8','GB2312',$file); echo file_exists($file); //输出为true ?>
以上就介紹了PHP中file_exists函數無法偵測包含中文的檔案名稱的解決方法,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。