【发布时间】:2015-01-24 13:00:50
【问题描述】:
我需要一个其他人可以使用的上传表单,以便将他们的文件交给我。
HTML:
<form method="post" action="upload.php" enctype="multipart/form-data" id="form">
<table>
<tr><td><p>your name:</p></td></tr>
<tr><td><input name="name" type="text" size="50" style="height: 30px;"></td></tr>
<tr><td><p>your mail-adress:</p></td></tr>
<tr><td><input name="mail" type="text" size="50" style="height: 30px;"></td></tr>
<tr><td><p>your document:</p></td></tr>
<tr><td><input type="file" name="file" value="" /><br /><h6 style="margin-top: 5px; margin-bottom: 2px;">max. filesize: 2 MB<br />allowed filetypes: .doc, .docx, .pdf, .rtf, .odt</h6></td></tr>
</table>
<br />
<input type="submit" value="Send">
</form>
PHP:
<?php
$fehler = "";
$name = $_POST['name'];
$mail = $_POST['mail'];
$file = $_POST['file'];
$maxsize = "2097152"; /* 2MB in Bytes */
$allowedext = array('doc','docx' ,'pdf', 'rtf', 'odt');
if (empty($name)) {
$fehler .= "<p>• no name given!</p>" ;
}
if (empty($mail)) {
$error .= "<p>• no e-mail adress given</p>" ;
}
if (empty($file)) {
$error .= "<p>• choose a file!</p>" ;
}
if (empty($error)) {
if (!in_array(filetype($file), $allowedext) { /* check filetype */
$error .= "<p>• filetype is not allowed</p>" ;
}
if (empty($error)) {
if (filesize($file) > $maxsize) { /* check filesize */
$error .= "<p>• file is too big</p>" ;
}
if (empty($error)) {
/* send data via mail */
echo("your document has been send.");
}
}
}
echo($error);
echo ('<p><a href="../send_article">back</a></p>');
?>
我想在上传之前检查文件类型和大小。当我将 upload.php 文件上传到我的服务器时,如果我尝试使用此表单,我只会得到一个没有任何错误的白屏。
【问题讨论】:
-
在上传之前验证文件类型非常困难。您可以在开始实施时尝试检查文件扩展名,但这并没有真正意义,因为这肯定是不是文件类型验证。此外,您展示的 php 方法当然不会在上传之前验证,而是在上传之后验证。为什么要在上传之前进行验证?为什么不在服务器端?
-
关于错误:不需要猜这里有什么错误可能是我。查看您的 http 服务器错误日志文件,它会说明问题所在。
-
@arkascha。没关系,但是您可以检查文件类型。请参阅我的回答,但有一个警告。
-
@Mouser 那你能解释一下如何检查文件类型吗?
-
@arkascha
file-type返回一个 mime 类型。为允许的文件创建一个 mime 类型列表并交叉引用它们。