如果名称字段和文件字段相同,则此脚本会出错。如果我想上传带有a.jpg
的文件并且名称字段也是a
而不是重命名给出错误。让我知道删除此问题并帮助删除以前的文件。
$username=$name ;
move_uploaded_file($_FILES["pic"]["tmp_name"],"albumpic/".$_FILES["pic"]["name"]);
$ext=substr($_FILES["pic"]["name"],strpos($_FILES["pic"]["name"],"."));
if(file_exists("albumpic/$username$ext")) { unlink("albumpic/$username$ext"); }
rename( "albumpic/".$_FILES["pic"]["name"],"albumpic/$username$ext");
$newphoto="$username$ext";
//var_dump($photo);
$err="";
答案 0 :(得分:3)
这是非常糟糕的代码。首先移动用户提供的文件,该文件将覆盖之前的任何内容。您以不可靠的方式提取文件的扩展名(想想如果有人上传mypic.jpg.exe
会发生什么)。然后,您可以重命名上传的文件,因为它可能会破坏以前的内容。
考虑一下你有“Joe”和“Fred”用户的个人资料图片“joe.jpg”和“fred.jpg”。如果Fred上传了一张名为“joe.jpg”的新个人资料图片,该怎么办?你的系统会破坏乔的形象。
请改为尝试:
$ext = pathinfo($_FILES['pic']['name'], PATHINFO_EXTENSION);
if (file_exists("albumpic/$username$ext")) {
unlink("albumpic/$username$ext");
}
if (!move_uploaded_file($_FILES['pic']['tmp_name'], "albumpic/$username$ext")) {
die("Unable to move user $username's picture to album directory");
}