如果文件不存在循环(PHP)

时间:2013-09-10 18:27:59

标签: php mysql file loops

我希望人们在我的网站上传照片,并将每张照片保存为随机文件名。我创建了上传表单。这是上传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");

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

任何帮助?

1 个答案:

答案 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。