今天用php的move_uploaded_file方法保存前端上传的中文名称文件时,方法返回false,调试时错误码为2,错误信息为:
move_uploaded_file(D:\git_prj\xx\think\Public\attachment/upload/员工年休假说明.docx): failed to open stream: Invalid argument。
在网上搜了下原因,linux下一般是由于目标目录没有写权限。但是我这个是windows目录,不存在权限的问题,而且我开发时用数字命名的文件名,测试正常。再继续找原因,发现是中文编码的问题。保存文件时,需要将中文由utf8转为gb2312,确实有点让人费解:(
$attachment = $_FILES['attachment'];
$name = iconv("UTF-8", "gb2312", $attachment['name']);
move_uploaded_file($attachment['tmp_name'], DOCROOT."attachment/upload/{$name }");
偷偷纠正一句,目标路径是可以用相对路径的