图像字段出错

时间:2011-06-29 15:00:14

标签: php

如果名称字段和文件字段相同,则此脚本会出错。如果我想上传带有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="";

1 个答案:

答案 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");
}