如何允许用户选择将文件上载到的位置?

时间:2011-11-28 00:25:23

标签: php html upload

我有一个基本的上传表格

<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 个答案:

答案 0 :(得分: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方面,确保无论表单发送什么(因为用户可以搞乱它),你只发送归档到少数选择之一。实际上,如果你能做到两者,那就更好了。

答案 1 :(得分:1)

假设您只有固定数量的目录,请在HTML中添加一个选择。

@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");  
}