2011-11-28 114 views
0

我有一個基本的上傳表單如何讓用戶選擇將文件上傳到哪裏?

<html> 
<head> 
<title>Upload a File</title> 
</head> 
<body> 
<font face=verdana size=2> 
<form enctype="multipart/form-data" method="post" action="upload_file.php"> 
<input type="hidden" name="MAX_FILE_SIZE" value="25000"> 

<p><strong>File to Upload:</strong><br> 
<input type="file" name="our_file" size="30"></p> 

<P><input type="submit" name="submit" value="Upload File"></p> 

</form> 
</font></body> 
</html> 

而且PHP文件

<? 

if ($our_file != "") { 

    copy($our_file, "upload/$our_file_name") or die("Couldn't Upload the file!"); 

} else { 

    die("No input file specified"); 
} 

?> 

<html> 
<head> 
<title>Successful File Upload!</title> 
<body><font face=verdana size=2> 

<B>Success!</B> 

<P>You sent: <? echo "$our_file_name"; ?>, a <? echo "$our_file_size"; ?> 
byte file with a mime type of <? echo "$our_file_type"; ?>.</p> 

</font></body> 
</html> 

我希望用戶能夠選擇他將文件上傳到哪個目錄。我假設我需要一個HTML表單,但我不知道要在PHP中添加什麼。任何幫助?

+2

我聞到安全漏洞。 – mauris

+0

注意幫助解決它? :C –

+0

如果允許用戶選擇放置上傳文件的位置是一項功能,那麼這不是一個錯誤。 – mauris

回答

1

假設您只有固定數量的目錄,請在您的HTML中包含一個select。

@thephpdeveloper,只要您的權限設置適合您的目錄,我不認爲選擇上傳的位置會比其他上傳更危險。我絕不是安全專家。只要確保你防止注射等。

<select name="selectDir"> 
    <option value="1">This Directory</option> 
    <option value="2">That Directory</option> 
</select> 


// on your submit 
if($_POST['selectDir'] === '1'){ 
    $dir = './thisdir/'; 
}elseif($_POST['selectDir'] === '2'){ 
    $dir = './thatdir/'; 
}else{ 
    die('You did not enter a valid value'); 
} 

if ($our_file != "") { 
    copy($our_file, $dir."".$our_file_name) or die("Couldn't Upload the file!");  
}else{ 
    die("No input file specified"); 
} 
+0

謝謝!我會稍微修改一下,以解決任何潛在的安全漏洞和問題。 –

+0

你永遠不知道會發生什麼。 – mauris

1

在您撥打copy()時,您需要將"upload/$our_file_name"修改爲您希望文件結束的目錄。

這可能是一個非常糟糕的主意,除非你知道如何限制可能會在那裏結束。如果你不在乎在所有關於安全性,可以做這樣的事情:

/* THIS NEXT LINE IS A BAD IDEA. DO NOT DO THIS. */ 
copy($our_file, $_POST['path_from_user'] . '/' . $our_file_name) /* BAD IDEA. DON'T DO IT THIS WAY */ 
/* DID I MENTION THAT THIS IS A BAD IDEA AND YOU SHOULD NOT DO IT THIS WAY? */ 

當然,如你猜,你需要正確設置HTML表單,要工作。

有很多方法可以嘗試使這更安全。其中一種方法是使用realpath()來檢查文件是否會在您期望的某個位置結束。另一種方法是爲用戶提供少量的選擇,在該選項中文件最終可以結束,並且在PHP方面確保不管表單發送了什麼(因爲用戶可以搞砸),只發送文件文件到其中的一小部分選擇。其實,如果你可以做的這兩個的,甚至更好。

+0

我將在PHP中使用realpath()並且處理你說的後一件事。謝謝! –

相關問題