Php 图片的唯一短文件名

Php 图片的唯一短文件名,php,Php,将用户上传的图像重命名为相当短但唯一的名称的最佳方法是什么 uniqid() ? uniqid()可以工作 但是您也可以使用md5()或sha1()来生成实际图像的哈希值。如果有人上传两次图像,这将减少冗余文件。您必须承认,您的文件名可能不会很短,但最佳做法是RFC 4122,最快的PHP实现之一是: // Execution (1000 IDs) took 7.509 milliseconds // Example uuid: f40bc6a1-3bce-4472-add8-bbbe500b

将用户上传的图像重命名为相当短但唯一的名称的最佳方法是什么

uniqid() ?
uniqid()可以工作


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

您必须承认,您的文件名可能不会很短,但最佳做法是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 ));
}

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

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

我让图片上传的原始图像名称,为搜索引擎优化的目的。如果我保持原始文件名不变,谷歌等将找到用户的蝙蝠侠或埃菲尔铁塔的图片。因此,我只需将mktime添加到前面,然后保存它

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

32位MD5生成的图像文件名有什么问题?不会太久的

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

对于大型图像,这将非常缓慢。创建UUID的速度要快得多,即使使用(相当冗余的)UUID检查collisionsTrue,我不建议对大型图像使用此方法。但我们可能讨论的是相当小的文件,这是web内容的典型情况。请注意,哈希算法不是为生成唯一值而设计的。@Gumbo:没错,这就是重点。哈希算法会给出输入数据的指纹,因此如果有人上传相同的im再次老化文件在本例中,它还将再次生成相同的文件名,从而最终节省存储空间,并为每个iamge生成唯一的文件名。如果用户提交的文件名是
。/../etc/passwd
或包含\0和其他内容,则这是一个坏主意。。。