我希望人们在我的网站上传照片,并将每张照片保存为随机文件名。我创建了上传表单。这是上传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");
问题是,如果之前有相同文件名上传的图片,它会被覆盖,我想改进代码,以便 如果之前没有使用相同文件名上传照片 - >保存照片 如果照片上传的文件名相同 - >生成另一个随机字符串并继续此循环,直到之前没有使用相同名称上传的照片,然后保存照片
任何帮助?
答案 0 :(得分: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 injection的攻击。您应该停止使用已弃用的mysql_*
函数并开始使用PDO或MySQLi。