php - rand() 用前一张的名字更新图片

php - rand() update image with the name of the previous one

我有一个 table 显示我的数据库的 CRUD。 当我在我的图像文件夹中上传图像时,我使用该函数生成一个随机数字名称 rand()

这是我编写的代码:

我的上传功能

function importer_image()
{
    if(isset($_FILES["image"]))
    {
        $extension = explode('.', $_FILES['image']['name']);
        $new_name = rand() . '.' . $extension[1];
        $destination = './upload/' . $new_name;
        move_uploaded_file($_FILES['image']['tmp_name'], $destination);
        return $new_name;
    }
}

我的上传php

if($_POST["operation"] == "Ajouter")
    {
        $image = '';
        if($_FILES["image"]["name"] != '')
        {
            $image = importer_image();
        }

问题是当我编写更新函数时,替换图像保留在我的文件夹中,而新图像生成了新名称。为了避免这种情况,我想创建一个条件 if $image !='' 1/ 删除旧文件 2/ 上传新文件并保持与删除的图像相同的名称。

所以我正在尝试创建一个 更新 php 进程,它将 1/ 删除 unlink() 2/ 上传新图像 用上一张图片的名字

为了删除旧图像并保持图像的新名称与以前一样,您必须在包含您上传的图像名称的表单中隐藏输入。

例如:

<input type="hidden" name="old-image" value="here is your previous image">

现在当你的上传功能点击时,你可以通过请求获取以前的图像名称,并且可以删除或保留以前的新图像。

if($_FILES['image']['name'] != '') {
    $old_image = $_POST['old-image'];  // get old image
    $new_name = $old_image; // make new image name as previous
    unlink('/upload/'.$old_image); // remove old image from folder
    $destination = './upload/' . $new_name;
    move_uploaded_file($_FILES['image']['tmp_name'], $destination);
    return $new_name;
} else {
    //if there is no image uploaded in the form then it will maintain old image
    return $new_name= $_POST['old-image']; 
}

希望对您有所帮助。

只有在上传的文件名中只有一个点时,您获取扩展名的代码才有效,例如在 image_a.1.jpg 上它将无效。改用:

$extension = strrchr($_FILES['image']['name'],'.');

另外,使用rand()命名最终会让人头疼,因为它第二次生成相同的数字,上传的图像会覆盖旧图像或不保存,可能会产生错误显示给用户您的完整服务器保存路径。我会使用一些散列,例如:

$new_name = md5($_FILES['image']['name'] . time());

如果您需要将文件名保存为 int,请使用 crc32() 而不是 md5()。您可以将 md5() 结果转换为 int,但这会产生一个非常长的 int(128 位),可能不适合您的数据库甚至 PHP 代码。