我正在使用以下腳本。它基本上檢查被上傳文件的名稱是否已經存在,如果它應該將其重命名爲其他內容並上傳它。到目前爲止,它不起作用。要麼重命名所有文件,要麼當我嘗試通過網頁打開文件說它損壞的文件。如果名稱已經存在,如何重命名文件?
代碼:
$sql="SELECT filename FROM doc_u WHERE person_id= '$pid'";
$result=mysql_query($sql);
$query = mysql_query($sql) or die ("Error: ".mysql_error());
if ($result == "")
{
echo "";
}
echo "";
$rows = mysql_num_rows($result);
if($rows == 0)
{
print("");
}
elseif($rows > 0)
{
while($row = mysql_fetch_array($query))
{
$existing = $row['filename'];
print("");
}
}
if ($filename === $existing) {
$filename = $uniqueidgenerator.strrchr($_FILES['filename']['name'], ".");
} else {
$filename = $_FILES['filename']['name'];;
}
//After checking it will move the files
if(move_uploaded_file($_FILES['filename']['tmp_name'],$upload_path . $filename))
echo '';
else
echo '';
這是如此重要。如果你讓別人上傳somejpeg.php到你的服務器,它可以驗證爲JPEG格式,但它本身仍然有惡意代碼。有人可以使用這種方法基本上接管你的服務器。 – dqhendricks
好,所以你要說取文件名並存儲在數據庫中,然後重命名正在上傳的文件。當你把它提供給用戶時,它將擁有我們給它的唯一文件名。但並不是那麼糟糕,用戶無法通過他們上傳的名稱獲取文件... – KPO
當然,您只需通過PHP提供文件並輸出'header('Content-disposition:attachment; filename = ORIGINAL_FILENAME_HERE') ;'並且用戶永遠不會在服務器上看到它真的被稱爲'207'。 –