我有这个表格
<form method="post">
<input type="text" name="name">
<input type="file" name="image">
<button type="submit" name="submit">Submit</button>
</form>
它的PHP就像这样
if(isset($_POST['submit'])){
$name = $_POST['name'];
$image = $_FILES['image']['name'];
$imageTmp = $_FILES ['image']['tmp_name'];
move_uploaded_file($imageTmp, "../img/$image");
$query = "INSERT INTO database(name, img) VALUES ('$name', '$img'")";}
现在在博客中,如果有人发布了一个主题并上传了名为[img1.png]的图片 然后我发布了另一个主题并上传了名为[img1.png]的图片,但它与他的形象完全不同,我将采取他的图像位置,我们的两个主题将具有相同的图像,我该如何解决这个问题?也许是一种随机化一个无法再输入的名字的方法?我的意思是,即使是随机名称也可以在数百万的机会中再次挑选,也许在命令中命名?我怎么能这样做?
答案 0 :(得分:2)
$dest_file = rand(1, 10000) . round(microtime(true)) . '_' . $_FILES['image']['name'];
move_uploaded_file($_FILES['image'][`tmp_name`], $dest_file);
这可能是一种可靠的方法。
答案 1 :(得分:1)
在PHP中使用命令
$foo=mysql_insert_id();
在此之后将图像插入数据库(我假设您有自动增量索引)后,使用
move_uploaded_file($imageTmp, "../img/".$foo."_".$image");
使用数据库中的ID加上原始名称移动到新文件..
答案 2 :(得分:0)
为每个帖子设置一些ID号 - 在图像文件名中使用该ID。例如,如果ID = 3,则img名称将为:“3_img1.png”
答案 3 :(得分:0)
使用以下方法为图像生成前缀:
答案 4 :(得分:0)
您可以使用uniqid()
更改文件名,也可以使用date()
或microtime()
创建文件名,这将创建唯一的文件名。
$name = $_POST['name'];
$image = date('YmdHis'); // this is the name
$imageTmp = $_FILES ['image']['tmp_name'];
move_uploaded_file($imageTmp, "../img/$image");
$query = "INSERT INTO database(`name`, `img`) VALUES ($name, $image)";
答案 5 :(得分:0)
如果文件已经存在,下面的代码将创建一个$ newname变量...例如
filename.bak.jpg - 将成为,filename_0123456789.bak.jpg,其中数字代表microtime ...未尝试运行代码,对不起,如果存在轻微错误。
// IF FILE ALREADY EXISTS
if (file_exists($name)){
// GET FILENAME ADDON FROM MICROTIME
$newtime = explode(' ', microtime());
$newtime = $newname[1].$newname[0];
// SEPERATE THE EXISTING FILENAME
$temp = explode('.', $name);
$temp[0]; // expecting filename
$temp[1]; // expecting file extension
// ASSEMBLE NEW FILENAME
$newname = $temp[0].'_'.$newtime.'.'.implode('.', array_slice($temp, 1));
unset($newtime);
unset($temp);
}
// IF FILE ALREADY EXISTS