PHP图片文件名重命名防覆盖
上传图片如果直接拿原文件名存盘,麻烦有两个:同名图片会互相覆盖,后传的直接把先传的顶掉;原文件名还常带中文、空格、特殊符号,存进去容易乱码或者打不开。
思路很简单,别信原文件名,自己造一个。扩展名保留,主体用时间戳加随机字符,再配个循环判断,撞名就重新生成,保证不会盖掉别人的图。
<?php
$tmp = $_FILES['pic']['tmp_name'];
// 只取扩展名,统一转小写
$ext = strtolower(pathinfo($_FILES['pic']['name'], PATHINFO_EXTENSION));
$allow = ['jpg', 'jpeg', 'png', 'gif'];
if (!in_array($ext, $allow)) exit('格式不对');
$dir = 'uploads/';
do {
// 时间戳 + 8位随机串,基本不会重复
$name = date('YmdHis') . '_' . bin2hex(random_bytes(4)) . '.' . $ext;
} while (file_exists($dir . $name)); // 真撞上了就再来一次
move_uploaded_file($tmp, $dir . $name);
echo '存成:' . $name;
目录记得提前建好并给写权限,否则文件存不进去。
说点什么 0