扫盲 2026.11.04 07:25 22 次浏览 0 条评论

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

行思随记

欢迎来到:行思随记