【问题标题】:Append a number to a filename if an image with that name already exists如果已存在具有该名称的图像,则将数字附加到文件名
【发布时间】:2013-04-18 17:21:21
【问题描述】:

我编写了一些 php,用于在用户上传新文件时检查文件是否已存在,如果存在,则将字符串附加到文件名。我想要的是在文件名的末尾添加一个数字,当上传另一个同名文件时,它的数字会加 1。

例如:我已经上传了一张文件名为 image.png 的图片,我又上传了一张具有相同文件名的图片。该文件应重命名为 image0.png。当我尝试使用文件名 image.png 上传另一个图像时,它应该重命名为 image1.png 等等。

我不确定如何在我的代码中完成此操作。谁能帮我吗?这是用于检查重复项并将某些内容附加到文件名的代码 sn-p。

if(file_exists("/customers/d/8/e/frankkluytmans.nl/httpd.www/testsite/cms/upload/".$_FILES["image"]["name"]))
{
    $filename = explode(".",$_FILES['image']['name']);
    $imageName = $filename[0]."hoi.".$filename[1];
}
else
{
    $imageName = $_FILES['image']['name'];
}

$image = mysql_real_escape_string(htmlspecialchars("/upload/".$imageName));

if (move_uploaded_file($_FILES["image"]["tmp_name"],     "./upload/".$imageName)) {�

mysql_query("INSERT frankkluytmans SET pagid='$pagid', title='$titlename', content='$contentname', image='$image', youtube='$youtube'")
or die(mysql_error()); 

header("Location: index.php"); 

}

【问题讨论】:

  • if(file exists .... ) 然后.= 追加
  • 查看PHP中的rand方法^^

标签: php mysql file-upload


【解决方案1】:

您可以使用递归函数来继续检查数字:

function checkFile($path, $file, $ext, $number)
{
    if(file_exists($path.$file.$number.$ext))
    {
        if($number == "")
            $number = 0;

        $number ++;
        return checkFile($path, $file, $ext, $number);
    }

    return $path.$file.$number.$ext;
}

//run mime type things to get extension. for now lets pretend it is .jpg
// and assume you stripped the extension from the uploaded file...
// also, pass blank to last param to start the file check without a number.

$extension = ".jpg";
$filename_minus_extension = "some-image";

$filename = checkFile('path-to-directory/', $filename_minus_extension, $extension, "");

这绝不是经过测试的,但总体思路是使用递归函数。如果您有具体问题,请随时提出,我可能会更新。

【讨论】:

  • 我能够根据您的意见制定解决方案。非常感谢!
【解决方案2】:

您需要某种循环,因为您不知道检查的频率。然后只需更改所需模式中的名称,直到不存在具有所选名称的文件

$info = pathinfo($filename); // get details
$name = $info['filename'];
$extension = $info['extension'];
$counter = 0;

while ( file_exists( $name.$counter.'.'.$extension ) )
{
    $counter++;
}

$new_name = $name.$counter.'.'.$extension;

代码未经测试,但应该可以工作。更重要的是我希望你明白它的作用;)

【讨论】:

    猜你喜欢
    • 2011-12-11
    • 1970-01-01
    • 2014-05-18
    • 2013-04-14
    • 2018-10-18
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    相关资源
    最近更新 更多