在做一個PHP文件上傳系統的時候,使用move_uploaded_file進行文件上傳,提示下面兩個warning,不能成功上傳文件
一個是cannot open steam
一個是cannot move
一開始查閱資料,網上千篇一律說是權限問題,因此加上了目錄權限,但是並沒有卵用
換一個思路,把相對路徑換成絕對路徑,也沒用
最後發現是編碼問題
因爲php字符編碼和windows不同,簡體中文版的windows對文件名的命名一般使用gbk或gb2312編碼。而php中的非ASCII字符串變量的值大多使用utf8編碼(當然,這個默認值可以修改。。)。你需要將
name變量轉換爲gbk編碼,才能在windows的文件系統中命名並存儲下來。可以使用mbconvertencoding函數來轉換字符串的編碼。假設你的php是utf8編碼,那麼你將你的代碼中moveuploadedfile( tmp_name,'upload/' .name);這一行改成moveuploadedfile( tmp_name,'upload/' .mb_convert_encoding($name,”gbk”, “utf-8”));
最後問題解決啦