今天在做上傳文件模塊時,調用move_uploaded_file()一直出現兩個警告
Warning: move_uploaded_file(./upfiles/圖片.rar) [function.move-uploaded-file]: failed to open stream: Invalid argument in D:\AppServ\www\29\show1.php on line 52
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\Windows\Temp\php4EFA.tmp' to './upfiles/圖片.rar' in D:\AppServ\www\29\show1.php on line 52
一開始以爲是文件沒有權限修改權限之後還是報錯
後來看到有人說是要使用文件絕對路徑 修改如下
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
修改後:
move_uploaded_file($_FILES["file"]["tmp_name"],
"D:\AppServ\www\29\" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
然後還是抱錯,
無意中換了一個英文文件上傳就沒有抱錯,才發現是中文亂碼的問題,我的php文件採用的是utf-8格式編碼,服務器是window系統,由於中文 Windows 系統的編碼是 GB2312
所以要把utf-8的編碼路徑轉爲gbk編碼。
$upload_file = iconv("UTF-8", "GB2312", $_FILES["myfile"]["name"]);
move_uploaded_file($_FILES["myfile"]["tmp_name"], $upload_file)