图片的独特短文件名

时间:2010-04-18 09:15:18

标签: php

将用户上传的图像重命名为相当简短但又独特的名称的最佳方法是什么?

uniqid() ?

5 个答案:

答案 0 :(得分:3)

uniqid()会起作用。

但您也可以使用md5()或sha1()来生成实际图像的哈希值。如果有人上传图像两次,这将减少冗余文件。

答案 1 :(得分:2)

您必须接受您的文件名可能不会很短,但最佳做法是RFC 4122,并且最快的PHP实现之一就是:

// Execution (1000 IDs) took 7.509 milliseconds
// Example uuid: f40bc6a1-3bce-4472-add8-bbbe500b7f72
function mimec_uuid()
{
    return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
        mt_rand( 0, 0x0fff ) | 0x4000,
        mt_rand( 0, 0x3fff ) | 0x8000,
        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ) );
}

就个人而言,我已经成功地将以下(更快和更短)的算法用于不需要像Flickr那样扩展的项目:

// Execution (1000 IDs) took 5.097 milliseconds
// Example uuid: 2c2e4067d1c92109660b8deecae1be08
function xuuid()
{
    return md5(microtime() . mt_rand( 0, 0xffff ));
}

答案 2 :(得分:0)

一种非常简单的方法是使用一些唯一的用户标识符和时间戳

$imgName = md5($userEmail.microtime());

答案 3 :(得分:0)

为了SEO目的,我让图片上传原始图片名称。如果我保持原始文件名不变,Google等人会找到用户的蝙蝠侠或艾菲尔铁塔图像。所以我只需将mktime添加到前面然后保存它。

$imagename = str_replace(' ','-',$imagename);
$imagename = str_replace('_','-',$imagename);
$target_path = $_SERVER['DOCUMENT_ROOT']."/uploads/".mktime()."-".$imagename;

答案 4 :(得分:0)

32位MD5生成的图像文件名出了什么问题?真的不长。

如果像Bryan一样,你要让他们使用自己的文件名,请确保删除任何不良字符,例如: 为了安全起见,等等。