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