随机化文件名

时间:2013-03-31 20:39:14

标签: php

我环顾四周,却找不到任何有助于我的话题。

我正在使用W3SCHOOLS的PHP上传代码的修改版本为我的网站“http://uploadifi.com”我遇到了一个小问题;很多使用它的人都有macbooks,因此当他们截取屏幕截图时,它会将其命名为“Picture 1”,依此类推。但是为了阻止他们重命名文件,无论如何我可以随机化一个名字或添加日期吗?我知道你可以使用Time(),但我不记得你是怎么做的。

感谢任何帮助,我的代码如下所示:

<?php
//8 Bits= 1 Byte
//1024 Bytes= 1KB
//1024 KB=1 M8
//1024 MB=1GB
//1024 GB=1TB
$allowedExts = array("gif", "jpeg", "jpg", "PNG", "png","rar","zip");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "image/gif") // .gif
|| ($_FILES["file"]["type"] == "image/jpeg") // .jpeg
|| ($_FILES["file"]["type"] == "image/jpg") // .jpg
|| ($_FILES["file"]["type"] == "image/jpg") // .jpg
|| ($_FILES["file"]["type"] == "image/PNG") // .PNG
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "application/x-rar-compressed")
|| ($_FILES["file"]["type"] == "application/zip"))
&& ($_FILES["file"]["size"] < 5242880) //Max size 5MB
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
//echo "Type: " . $_FILES["file"]["type"] . "<br>";//Not Needed For Now
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " KB (Do<b> " . ($_FILES["file"]       ["size"] / 1024) . " / 1024</b> **CLOSE BUT NOT ACCURATE**)<br>";

if (file_exists("files/" . $_FILES["file"]["name"]))
  {
  echo $_FILES["file"]["name"] . " already exists. Please change file name and try again. ";
  }
else
  {
  $sanitizedFilename = str_replace(" ","_",$_FILES["file"]["name"]);
  move_uploaded_file($_FILES["file"]["tmp_name"],
  "files/" . $sanitizedFilename);
  echo "Stored in: " . "<a href=\ffiles/" . $sanitizedFilename . "> ". $_FILES["file"]       ["name"] ." </a>";
  echo "<br><b>If the above link does not work; please make sure your uploaded<br>file does not have any spaces in the name.<br> IE 'Hello There' make sure it is 'hellothere'.</b>";
  }
}
}
else
{
echo "Invalid file";
}
?> 

3 个答案:

答案 0 :(得分:2)

您应该将文件信息存储在数据库中,并使用自动递增的ID作为文件名,因为它是唯一的。这具有更好的可维护性的额外好处。您可能也想要实现访问控制。以合理的方式执行此操作非常需要数据库。

此外,通过扩展程序检查文件类型并不安全。查看fileinfo API

答案 1 :(得分:0)

您可以在文件名中使用日期:

$sanitizedFilename .= '_'.date('YmdHis');

甚至使用microtime

答案 2 :(得分:0)

我想你的目的是拥有一个独特的文件名。

最好的方法是使用上传文件的MD5哈希值。

请在此处找到更多信息:http://php.net/manual/en/function.md5-file.php

现在检查文件是否存在,将取决于实际图像是否已存在,而不是图像名称是否已存在。