1、检测文件类型,并且用用户上存文件名保存
代码如下: if(isset($_FILES['img'])) { $file = save_file($_FILES['img']); if($file===false) exit('上存失败!'); echo "上存成功!",$file; } function check_file($img) { ///读取文件 if($img['error']>0) return false; $tmpfile = $img['tmp_name']; $filename = $img['name']; ///读取文件扩展名 $len=strrpos($filename,"."); if($len===false) return false; //得到扩展名 $ext = strtolower(substr($filename,$len+1)); if(!in_array($ext,array('jpg','jpeg','png'))) return false; return true; } function save_file($img) { if(!check_file($img)) return false; //格式检测ok,准备移动数据 $filename = $img['name']; $newfile = "upload/" .$filename; if(!move_uploaded_file($img["tmp_name"],$newfile)) return false; return $newfile; } ?> 以上代码,对输入类型也做了判断,看了没有问题。但是问题,确恰恰出现在对获取的用户名变量检测上面。直接获取传入用户名,然后存为文件。 有朋友会说:这些文件名都是我电脑里面存在的,文件名格式都受限于操作系统对文件名定义。 但是,需要注意是,对于$_FILES里面获取变量,是直接来自http request请求。它跟普通获取其它get,post变量一样。 因此,别有用心的人,往往会自己模拟浏览器,给服务器发送一个特殊文件名。然后,让存文件时候,能够正常保存为自己格式。 前些年,”