我是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.";
}
?>
请帮忙。
答案 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插入将其放入数据库中。如果您需要更多详细信息,则需要发布代码。