php随机图像文件名

时间:2012-11-20 22:40:04

标签: php

好的我正在使用我在谷歌上发现的一个片段来获取用户上传的图片并将其放在我的目录下的内容

但我担心重复,所以我要将图像上传为随机数

这里是我的代码,你可以理解通过它无论如何都要了解

<label for="file">Profile Pic:</label> <input type="file" name="ProfilePic" id="ProfilePic" /><br />

<input type="submit" name="submit" value="Submit" />

$ProfilePicName = $_FILES["ProfilePic"]["name"];
$ProfilePicType = $_FILES["ProfilePic"]["type"];
$ProfilePicSize = $_FILES["ProfilePic"]["size"];
$ProfilePicTemp = $_FILES["ProfilePic"]["tmp_name"];
$ProfilePicError = $_FILES["ProfilePic"]["error"];

$RandomAccountNumber = mt_rand(1, 99999);  
echo $RandomAccountNumber; 
move_uploaded_file($ProfilePicTemp, "Content/".$RandomAccountNumber.$ProfilePicType);

然后基本上我会尝试让它将随机数放入我的数据库

有人给了我一个新的片段,看起来它会做我想要的但是现在文件并没有一直到我的目录

$RandomAccountNumber = uniqid();
echo $RandomAccountNumber;

move_uploaded_file($ProfilePicName,"Content/".$RandomAccountNumber);

5 个答案:

答案 0 :(得分:17)

尝试使用php uniqid方法生成您需要的唯一ID

http://php.net/manual/en/function.uniqid.php

$RandomAccountNumber = uniqid();
move_uploaded_file($ProfilePicTemp, "Content/" . $RandomAccountNumber);

答案 1 :(得分:5)

当我上传图片时,我通常会将其保存为图片内容的sha1()sha1_file())。这样,你就得到了一石二鸟:你永远不会(如果你这样做,去填写最近的彩票)获得重复的文件名,并且,你将防止重复的图像(因为重复的图像将具有相同的校验和)

然后,您有一个数据库来整理哪个图像,并将其正确显示给用户。

答案 2 :(得分:4)

这是我上传图片时使用的内容:session_id()time()和随机字符串的组合:

$rand = genRandomString();
$final_filename = $rand."_".session_id()."_".time();

function genRandomString() 
{
    $length = 5;
    $characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWZYZ";

    $real_string_length = strlen($characters) ;     
    $string="id";

    for ($p = 0; $p < $length; $p++) 
    {
        $string .= $characters[mt_rand(0, $real_string_length-1)];
    }

    return strtolower($string);
}

我希望这有帮助。

答案 3 :(得分:3)

random != unique

无论您使用什么方法生成“随机”文件名,您可能都希望这样做以避免冲突。

$path = '/path/to/directory/';
do {
    $filename = some_function();
} while( file_exists($path.$filename) );

这不是非常必要的,但是如果你只是想要在百万分之一的文件名冲突的情况下寻找安心,那么这些额外的行就能解决问题。

答案 4 :(得分:1)

我最喜欢的Coding Horror articles之一解决了为什么这种方法比看起来更笨,你应该使用像uniqid而不是mt_rand(1, 99999); ...