如何在上传之前重命名文件(唯一名称)并在mysql数据库中保存路径

时间:2014-11-25 15:23:43

标签: php mysql

我是PHP的新手,面临很大的困难。 问题: 1.如何为要上载的文件指定唯一名称。 2.如何在数据库中保存路径。

我上传文件并在数据库中保存一些信息的代码是:

<?php   
    $target = "images/";  $target = $target . basename( $_FILES['photo']['name']);   
    $name=$_POST['name'];  $email=$_POST['email'];  $phone=$_POST['phone'];  $pic=($_FILES['photo']['name']);   

    mysql_connect("localhost", "admin", "admin") or die(mysql_error()) ; 
    mysql_select_db ("database") or die(mysql_error()) ;   

    mysql_query("INSERT INTO `applicants` VALUES ('$name', '$email', '$phone', '$pic')") ;

    if(move_uploaded_file($_FILES['photo']['tmp_name'], $target))
    {   
        echo "Your application ". basename( $_FILES['uploadedfile']['name']). " has been uploaded, and your information has been saved";  
    }

    else {   
        echo "Sorry, there was a problem uploading your resume.";
    }
    ?>

请帮忙。

2 个答案:

答案 0 :(得分:1)

生成随机数/字符串然后使用廉价算法进行散列的技术是一种很好的做法,但是你需要检查它是否确实是一个独特的值:

首先生成随机内容,并使用廉价算法对其进行哈希处理,例如:md5

$filename = md5(rand() . substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 30) . rand());

尽管起初这看起来完全是随机的,但实际上MD5的碰撞率并不那么高。因此,我建议确保此文件尚不存在。对于这种情况,循环可能是好的:

for ($i = 0; $i < 1000; $i++) {
    # Attempt to generate a unique filename
    $filename = md5(rand() . substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 30) . rand());

    # We don't have to keep trying if this file does not exist
    if (!file_exists("files/$filename.txt")) break;
}

现在您可以继续进行任何操作(例如:将此路径插入数据库)。

答案 1 :(得分:-1)

1)为文件提供唯一名称有很多种不同的方法。你可以生成一个令人讨厌的guid http://php.net/manual/en/function.com-create-guid.php或者你可以像Daan所提到的那样使用这种方法:md5(microtime().date('d-m-Y H:i:s').$_FILES['file']['name']);

2)只需将路径的值存储到变量中,然后使用简单的sql插入将其放入数据库中。如果您需要更多详细信息,则需要发布代码。

相关问题