错误内容:
“Warning : move_uploaded_file(绝对路径/供应商资料.xlsx): failed to open stream: Invalid argument”
试了下传数字和字母,成功!于是考虑了当前是在windows下开发,windows下的默认编码是gb2312,
所以需要将文件名的编码格式转了。
(转)
上面代码的意思是,先用 iconv() 函数对上传文件名转换为 GB2312 码(上传的文件名若含有中文,那么使用 UTF-8 编码),然后再进行 move_uploaded_file() 改名。这样在中文系统下就可以正常显示了。但是 Linux 系统本身就是使用 UTF-8 来编码的,因此想要在 Linux 下正常显示中文,那么就再次 iconv() 转换一下,这是下面所说的第 2 种情况。
- 服务器是 Linux 系统
如上面所讲,利用 move_uploaded_file() 函数支持 GBK 的特性,那么我们可以利用再次转换的小技巧使上传的文件名中含有中文的文件在 Linux 下也能正常显示中文名称,如下面代码所示:
if (move_uploaded_file($_FILES["myfile"]["tmp_name"],$upload_file))
{
$res_file= iconv("GBK","UTF-8",$upload_file);
// 再从 GBK 转为 UTF-8
rename($upload_file,$res_file);
// 重命名一下文件
echo "<strong>upload ok</strong>
";
}
else
{
echo "upload failed";
}
?>
运行输出:
<1> 上传一个文件名中含有中文的文件:
<2> 检查在 Linux 下是否正常显示:正常。