今天在做上传文件模块时,调用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)