在做一个PHP文件上传系统的时候,使用move_uploaded_file进行文件上传,提示下面两个warning,不能成功上传文件
一个是cannot open steam
一个是cannot move
一开始查阅资料,网上千篇一律说是权限问题,因此加上了目录权限,但是并没有卵用
换一个思路,把相对路径换成绝对路径,也没用
最后发现是编码问题
因为php字符编码和windows不同,简体中文版的windows对文件名的命名一般使用gbk或gb2312编码。而php中的非ASCII字符串变量的值大多使用utf8编码(当然,这个默认值可以修改。。)。你需要将 name变量转换为gbk编码,才能在windows的文件系统中命名并存储下来。可以使用mbconvertencoding函数来转换字符串的编码。假设你的php是utf8编码,那么你将你的代码中moveuploadedfile( tmp_name,'upload/' . name);这一行改成moveuploadedfile( tmp_name,'upload/' .mb_convert_encoding($name,”gbk”, “utf-8”));
最后问题解决啦