7

好的,我使用我在 google 上找到的一个片段来获取用户上传的图像并将其放在我的目录下 Content

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

好吧,这是我的代码,无论如何,您可能都可以理解我的目的

<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);
4

5 回答 5

20

尝试使用phpuniqid方法生成你需要的唯一id

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

$RandomAccountNumber = uniqid();
move_uploaded_file($ProfilePicTemp, "Content/" . $RandomAccountNumber);
于 2012-11-20T22:41:50.813 回答
5

这是我在上传图片时使用的: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);
}

我希望这会有所帮助。

于 2012-11-20T23:00:40.263 回答
5

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

然后,您有一个数据库来分类哪个图像是哪个图像,并将它们正确地显示给用户。

于 2012-11-20T22:42:26.893 回答
3

random != unique

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

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

这不是非常必要的,但如果您只是在百万分之一的文件名冲突的情况下寻求安心,那么这几行额外的行就可以了。

于 2012-11-20T22:51:26.753 回答
1

我最喜欢的编码恐怖文章之一解决了为什么这种方法比看起来更笨,你应该使用类似的东西uniqid而不是mt_rand(1, 99999);......

于 2012-11-20T22:47:44.750 回答