2013-03-31 51 views
-2

我环顾四周,但找不到任何关于此主题的帮助。随机文件名

我使用的W3SCHOOLS的PHP上传代码的修改版本为我的网站“http://uploadifi.com”我遇到了一个小问题;很多使用它的人都拥有macbook,所以当他们拍摄一张屏幕截图时,它将其命名为'图片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"; 
} 
?> 

回答

0

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

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

甚至使用microtime

+0

' 解析错误:语法错误,意外的';' in /home/a5561228/public_html/upload_form.php on line 66 ' Before:“files /”。 $ sanitizedFilename); 你的代码:“files /”。 $ sanitizedFilename。='_'。date('YmdHis'); – Laim

+0

在此处添加第66行以查找问题 – Alireza41

+0

现在第66行:“files /”。 $ sanitizedFilename。='_'。date('YmdHis'); – Laim

2

你应该的文件信息可能存储在数据库中,并使用自动递增的ID为您的文件名,因为它是独一无二的。这具有更好的可维护性的附加好处。你可能也想实现访问控制。以合理的方式完成这项工作非常需要数据库。

此外,通过扩展检查文件类型是不安全的。检查出fileinfo API

+0

谢谢!如果我可以'开始工作,这可能会改变到数据库。 – Laim

+0

@Laim - 迁移到数据库是一个好主意。 – jwueller

0

我想,你的目的是为了有一个唯一的文件名。

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

请找到更多在这里:http://php.net/manual/en/function.md5-file.php

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

+0

MD5让我感到困惑。谢谢你的想法。 – Laim