我有一个基本的上传表格
<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中添加什么。有什么帮助吗?
答案 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");
}