Php 如何在mysql数据库中上传并保存路径之前重命名文件(唯一名称)
我是PHP新手,面临着很大的困难。 问题: 1.如何为要上载的文件指定唯一名称。 2.如何在数据库中保存路径 我上传文件并在数据库中保存一些信息的代码是:Php 如何在mysql数据库中上传并保存路径之前重命名文件(唯一名称),php,mysql,Php,Mysql,我是PHP新手,面临着很大的困难。 问题: 1.如何为要上载的文件指定唯一名称。 2.如何在数据库中保存路径 我上传文件并在数据库中保存一些信息的代码是: <?php $target = "images/"; $target = $target . basename( $_FILES['photo']['name']); $name=$_POST['name']; $email=$_POST['email']; $phone=$_POST['phone']
<?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.";
}
?>
生成随机数/字符串,然后使用廉价算法对其进行散列的技术是一种很好的做法,但您需要检查这是否确实是唯一的值:
首先生成一个随机的东西,并使用廉价算法对其进行散列,例如: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;
}
($i=0;$i<1000;$i++)的{
#尝试生成唯一的文件名
$filename=md5(rand().substr(str_shuffle(“0123456789abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz”)、0,30).rand();
#如果此文件不存在,我们不必继续尝试
如果(!file_存在(“files/$filename.txt”))中断;
}
现在,您可以继续执行任何需要的操作(例如:将此路径插入数据库)。1)有许多不同的方法为文件指定唯一的名称。您可以生成一个看起来很糟糕的guid,或者可以使用Daan提到的类似此方法:md5(microtime().date('d-m-Y H:i:s')。$\u FILES['file']['name'])代码>
2) 只需将路径的值存储到变量中,并使用简单的sql插入将其放入数据库中即可。如果你想要更多的细节,你需要发布你的代码。md5(microtime().date('d-m-Y H:i:s')。$\u文件['file']['name'])代码>是唯一的。请花一分钟重新编写您的问题,包括代码并描述“给出唯一名称”的含义,这样我们就不会试图读懂您的想法。@Daan-它不是唯一的。此外,出于对其中任何内容的热爱,不要链接w3schools——这是最糟糕的在线资源,它只会教给人们错误的东西。@N.B.技术上是正确的。@voidmain不鼓励使用w3schools。尽管对初学者来说可能简单明了,但如果你将来的工作完全基于该网站的信息,这是不准确的,甚至是危险的。尽管你的答案会让大多数用户满意,但实现唯一性或随机性的方法并不是人们应该从你那里复制的。我们有一种生成唯一文件名的方法,称为tempnam
,它将生成唯一的临时名称。无论采用何种方式,都可以对其进行进一步的散列,但使用md5和rand()不应作为生成看似随机的数据的最终答案。然而,我怀疑即使在高度并发的环境中,您的方法也会引起冲突。我现在遇到了一个新问题。我可以上传具有唯一名称的文件,但现在我无法在数据库中保存任何数据。我肯定我做错了什么事。你能帮我找出错误吗。