利用file_get_contents打開文件或采集遠程服務器文件如果文名或url中碰到漢字中文那麼會出現failed to open stream:Lnvalid argument in錯誤。
今天遇到一個很棘手的問題,客戶用ftp向服務器傳了一個文件,但是卻無法被程序識別.查看代碼後,沒有發現問題,最後重演流程發現,客戶上傳的文件是中文命名的.於是小做測試發現,file_get_contents函數盡然不支持中文文件名文件.
原有代碼如下:
$filename='哈.txt';
echo file_get_contents('./'.$filename);
執行以後顯示結果:
悲劇開始.
之後試了不少判斷方法,顯示懷疑是不是編碼問題,文件編碼,代碼編碼一遍遍的排查,可是都是很匹配的啊.
之後查了相關資料卻沒有找到,於是google了一下發現有人遇到這個問題,說是系統編碼的問題,於是開始對文件名進行轉碼.
文件用的是utf-8編碼,但是系統默認為gbk.所以先把文件名轉換gbk然後再讀取.
$filename='哈.txt';
$filename=iconv('utf-8','gb2312',$filename);
//echo file_get_contents(mb_convert_encoding('./哈.txt', 'gbk', 'utf-8')); (另一種方法)
echo file_get_contents('./'.$filename);
測試結果:
讀取成功.
OK,大功告成.