-4

我希望人们在我的网站上上传照片,并将每张照片保存为随机文件名。我创建了上传表单。这是上传php函数:

if($_FILES['myprofilepicture']['type']!='image/jpeg' && $_FILES['photo']['type']!='image/jpg' && $_FILES['photo']['type']!='image/png'){header("location:wrongfile.php");}else{
$info = pathinfo($_FILES['photo']['name']);
$randomfile = substr(str_shuffle("abcdefghijklmnopqrstuvwxyz0123456789"),0,$length);
$target = 'picture/'.$randomfile; $now=time();
move_uploaded_file( $_FILES['myprofilepicture']['tmp_name'], $target);
mysql_query("Insert into photos(name,photo,date)values('$myname','$randomfile','$now')")or die('database error occured');
header("location:home.php");

问题是,如果之前上传了具有相同文件名的图片,它将被覆盖,我想改进代码,以便如果之前没有上传具有相同文件名的照片->如果上传的照片使用相同的文件名,则保存照片之前相同的文件名->生成另一个随机字符串并继续此循环,直到以前没有同名的照片上传,然后保存照片

有什么帮助吗?

4

1 回答 1

2

使用file_exists()函数检查文件是否存在:

if($_FILES['myprofilepicture']['type'] != 'image/jpeg' && 
   $_FILES['photo']['type'] != 'image/jpg' && 
   $_FILES['photo']['type'] != 'image/png')
{
    header("location: wrongfile.php");
}
else
{    
    $info = pathinfo($_FILES['photo']['name']);     
    $randomfile = substr(str_shuffle("abcdefghijklmnopqrstuvwxyz0123456789"),0,$length);
    $target = 'picture/'.$randomfile; 

    if(!file_exists($target))  //if file doesn't exist
    {       
        $now = time();
        move_uploaded_file( $_FILES['myprofilepicture']['tmp_name'], $target);
        mysql_query("Insert into photos(name,photo,date)values('$myname','$randomfile','$now')")or die('database error occured');
        header("location:home.php");
    }

}

上面这段代码中的if条件语句会检查文件是否已经存在,如果不存在,则执行块中的语句。但是,如果您想重复该过程直到找到唯一的文件路径,您可以使用循环代替:

while(!file_exists($target))  
{       
    # code ...
}

作为旁注:您当前正在将用户输入直接插入到 SQL 查询中。这是一种非常糟糕的做法,它会使您的查询容易受到SQL 注入的攻击。您应该停止使用已弃用的mysql_*函数并开始使用 PDO 或 MySQLi。

于 2013-09-10T18:31:10.117 回答