2011-11-28 37 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()并且处理你说的后一件事。谢谢! –

相关问题