我编写了一些php,在用户上传新文件时检查文件是否已经存在,如果存在,则向文件名添加字符串。我想要的是在文件名的末尾添加一个数字,当另一个同名文件上传时,它比数字高1。
例如:我已经上传了一张图片,文件名为image.png,我上传了另一张同名的图片。该文件应该重命名为image0.png。当我尝试上传另一个文件名为image.png的图像时,它应该被重命名为image1.png,等等。
我不确定如何在我的代码中完成这一点。有人能帮我吗?这是检查重复的代码片段,并向文件名追加一些内容。
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");
}
您可以使用递归函数继续检查数字:
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, "");
没有经过测试,但一般的想法是使用递归函数。如果你有什么具体的问题,请随时提问,我可能会更新
您需要某种循环,因为您不知道需要多久检查一次。然后简单地按照所需的模式更改名称,直到所选名称
不存在为止$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;
代码没有经过测试,但应该可以工作。更重要的是,我希望你明白它是做什么的;)