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 代码。
我有一个 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 代码。