如果图片的文件名相同,上传时如何在图片中添加数字


how to add number in picture when upload if same file name of picture

我有上传的代码

$file=$_FILES['image']['tmp_name'];
$image= addslashes(file_get_contents($_FILES['image']['tmp_name']));
$image_name= addslashes($_FILES['image']['name']);
move_uploaded_file($_FILES["image"]["tmp_name"],"photo/" . $_FILES["image"]["name"]);
$location="photo/" . $_FILES["image"]["name"];

然后插入sql的$location代码以添加

问题是如何添加我的图片文件名编号,例如:如果我上传了"picture.jpg",如果我将再次上传相同的文件名,文件名的输出将为picture(1).jpg,如果我再次上传相同文件名,输出文件名将为picture(2).jpg,依此类推,如果我上传相同文件名称,我希望"()"增加。提前感谢^^

这可以通过循环实现:

$info = pathinfo($_FILES['image']['name']);
$i = 0;
do {
    $image_name = $info['filename'] . ($i ? "_($i)" : "") . "." . $info['extension'];
    $i++;
    $path = "photo/" . $image_name;
} while(file_exists($path));
move_uploaded_file($_FILES['image']['tmp_name'], $path);

您还应该清除输入文件名:

  • 文件名的字符串清理程序
  • 对字符串进行消毒以使其URL和文件名安全

此代码未经测试,但我认为大致如下:

if (file_exists('path/to/file/image.jpg')){
 $i = 1;
 while (file_exists('path/to/file/image ('.$i.').jpg')){
   $i++;
 }
 $name = 'image ('.$i.');
}

然后将图像保存到$name。(在某些情况下会产生图像(2).jpg)

如果你想在上传后有一个唯一的图像名称,即使它们有相同的名称,或者它们在循环中上传,也意味着多次上传。

$time = time() + sprintf("%06d",(microtime(true) - floor(microtime(true))) * 1000000);
$new_name=$image_name.'_'.$time.'.'.$extension 

您可以添加具有每个纳秒不同的唯一时间戳的图像名称,并生成唯一时间戳

尝试这个

$path = "photo/" . $_FILES["image"]["name"];
$ext = pathinfo ($path, PATHINFO_EXTENSION );
$name = pathinfo ( $path, PATHINFO_FILENAME ] );
for($i = 0; file_exists($path); $i++){
if($i > 0){
  $path =  "photo/" .$name.'('.$id.').'.$ext;
} 
}
echo $path;

你能试试这个吗,

$name = $_FILES['image']['name'];
$pathinfo = pathinfo($name);
$FileName = $pathinfo['filename'];
$ext = $pathinfo['extension'];
$actual_image_name = $FileName.time().".".$ext; 
 $location="photo/".$converted_name;    
if(move_uploaded_file($tmp, $location))
{

}