2013-03-31 49 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