在PHP中为上传的文件添加随机数


Adding random number to uploaded file in PHP

我有我的上传php代码,我的意图是,从$_files获得的文件,在图像名称中添加一个0到9999之间的随机数,如下所示:

image sent: image.jpg
before saving: image321.jpg

图像保存在我的上传文件夹中,但文件名类似"php2983204tmp"

if ($file !== null) {
    $rand = rand(0000,9999);
    $path = "some_path";
    $file_name = $file->getClientOriginalName(); // file
    $extension = $file->getClientOriginalExtension(); // jpg
    $file->move($path, $file_name.$rand.$extension);
    $response = "File loaded successfully: " . $file_name.$extension;
    $response .= '<br>size: ' . filesize($path . '/' . $file->getClientOriginalName()) / 1024 . ' kb';
    return new Response($response);

有什么建议吗?

示例中的文件名为php,扩展名为tmp。他们都没有你缺少的.

您需要在$file_name$rand之后,$extension之前添加点.作为字符串,如下所示:

$file->move($path, $file_name.$rand. "." .$extension);

TIME 始终是唯一标识符,如下所示使用(可能有帮助):

             if ($file !== null) {
                $rand = rand(0000,9999).time();
                $path = "some_path";
                $file_name = $file->getClientOriginalName(); // file
                $extension = $file->getClientOriginalExtension(); // jpg
                $file->move($path, $file_name.$rand.$extension);
                $response = "File loaded successfully: " . $file_name.$extension;
                $response .= '<br>size: ' . filesize($path . '/' . $file->getClientOriginalName()) / 1024 . ' kb';
            return new Response($response);

您需要在实际字符串中添加所需的字符。

$file->move($path, $file_name.$rand.".".$extension);

但是我不得不说,我反对你这样做,你甚至没有检查"新"创建的字符串是否已经存在于目录中。最好使用原始文件名对上传时间进行散列,将文件重命名为新的散列,并使用数据库指向文件,这样就不会发生文件名冲突。

$fn = md5(microtime(true) . $extension  . $file_name);
$file->move($path, $fn);