2013-05-28 33 views
0

我有兩個文件(html和php)。用戶上傳html表單中的文件,php文件包含腳本以將文件上傳到服務器上。 它完美的工作,我的問題是當用戶1上傳'wordThing.docx'和用戶2出現並上傳'wordThing.docx'時,用戶1的文件將被覆蓋。如何在PHP中添加輸入文件名的詳細信息

這裏是我的HTML代碼:

<html> 
<body> 
<form action="upload_file.php" method="post" enctype="multipart/form-data"> 
<label for="file">Filename:</label> 
<input type="file" name="file" id="file"><br /> 

<label for="yourName">Your name:</label> 
<input type="textbox" name="yourName" id="yourName" /><br /> 
<input type="submit" name="submit" value="Submit"><br /> 
</form> 
</body> 
</html> 

這是我的PHP腳本:

<?php 
$userName=$_POST['yourName']; 
$target_path = "uploads/"; 
$target_path = $target_path . basename($_FILES['uploadedfile']['name']); 
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) 
{ 
    echo "The file ". basename($_FILES['uploadedfile']['name']). 
    " has been uploaded"; 
} 
else 
{ 
    echo "There was an error uploading the file, please try again!"; 
} 
?> 

我想用戶將進入 'YOURNAME' 文本連接。因此,服務器包含不同的文件名,並且不必重寫。 因此,假設用戶具有不同的名稱,我想知道如何將文件保存在服務器上並附上名稱。例如:用戶1的文件上傳將是'wordThingSusan.docx'

我希望這不是太多的信息。我只是想要清楚準確。 爲了防止有人試圖使用此代碼,您需要在目錄下有一個名爲「uploads」的文件夾才能使用。

+0

您的代碼假定上傳總是成功。 **不是**一個好主意。總是檢查'$ _FILES ['uploadedfile'] ['error']'非零代碼,這表明失敗。 –

+0

謝謝,馬克。將研究它。 –

回答

2

變化

$target_path = $target_path . basename($_FILES['uploadedfile']['name']); 

$target_path = $target_path . time() . rand(11, 99) . basename($_FILES['uploadedfile']['name']); 

所產生的名字會像上傳/ 123456789052wordThing.docx

時間()會給你時間格式1234567890,蘭特( 11,99)將產生11到99之間的隨機數,因此即使2個人同時上傳同一文件,該文件也不會被覆蓋。

+0

謝謝,Deepsy。我希望我能想到這一點。使一個很大的意義... –

+0

Deepsy,有沒有一個原因,我不能上傳PDF文件與我的腳本?我嘗試了其他文件,圖像,文檔等...但我的PDF文件不會上傳。 –

+0

@EliSkywalker我在下面的代碼中看不到任何格式限制,它應該適用於每種格式。你有什麼錯誤嗎?你確定文件沒有被破壞嗎?您可以嘗試打印$ _FILES ['uploadedfile'] ['error']以查看它是否返回任何錯誤代碼。還有move_uploaded_file()失敗? – Deepsy

1

只需添加一個Unix時間戳的文件名開頭:

<?php 
    $userName=$_POST['yourName']; 
    $target_path = "uploads/"; 
    $target_path = $target_path . date('U') . '_' . basename($_FILES['uploadedfile']['name']); 
    if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) 
    { 
     echo "The file ". basename($_FILES['uploadedfile']['name']). " has been uploaded"; 
    } else { 
     echo "There was an error uploading the file, please try again!"; 
    } 

>

+0

謝謝,菲爾... –

0

我會看看到file_exists方法:

http://php.net/manual/en/function.file-exists.php

如果檢查出來回到文件已經存在我會重命名文件,然後用新名稱保存它。

這就是我將如何嘗試它。

+0

啊,是的......檢查文件是否存在,如果條件爲真保存在不同的名稱中,否則就保存。尼斯。 –

相關問題