【发布时间】:2017-08-24 01:05:20
【问题描述】:
我想测试一下文件上传代码。这是一个上传文件代码,它可以选择用户是否要上传文件或只是空白提交。我添加了错误消息以限制文件扩展名。它有效。
然后,我添加了一条错误消息来通知用户有关限制文件大小的信息。但不知何故得到了Warning: POST Content-Length of 681075903 bytes exceeds the limit of 8388608 bytes in Unknown on line 0
而不是来自 php 代码的“抱歉,您的文件太大。只允许 3MB”的错误消息。
<html><head></head>
<body>
<form method="post" action="" enctype="multipart/form-data">
Upload File:
<input type="file" name="upload" /><br>
<input type="submit" name="submit" value="Submit"/>
</form>
</body>
</html>
<?php
include("config.php");
if(isset($_POST['submit']) ){
//user has the option whether to upload the file or not
if ($_FILES['upload']['size'] != 0 ){
$filename = $con->real_escape_string($_FILES['upload']['name']);
$filedata= $con->real_escape_string(file_get_contents($_FILES['upload']['tmp_name']));
$filetype = $con->real_escape_string($_FILES['upload']['type']);
$filesize = intval($_FILES['upload']['size']);
$allowed = array('zip','rar', 'pdf', 'doc', 'docx');
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if(in_array($ext, $allowed)){
if($filesize > 3000000) {
$query = "INSERT INTO contracts(`filename`,`filedata`, `filetype`,`filesize`) VALUES ('$filename','$filedata','$filetype','$filesize')" ;
if ($con->query($query) == TRUE) {
echo "<br><br> New record created successfully";
} else {
echo "Error:<br>" . $con->error;
}
}
else{
echo "Sorry, your file is too large. Only 3MB allowed";
}
}
else{
echo "Sorry, only zip, rar, pdf, doc & docs files are allowed.";
}
//if user has no file to upload then proceed to this else statement
} else {
$filename = $con->real_escape_string($_FILES['upload']['name']);
$filetype = $con->real_escape_string($_FILES['upload']['type']);
$filesize = intval($_FILES['upload']['size']);
$query = "INSERT INTO contracts(`filename`, `filetype`,`filesize`) VALUES ('$filename','$filetype','$filesize')" ;
if ($con->query($query) == TRUE) {
echo "<br><br> New record created successfully";
} else {
echo "Error:<br>" . $con->error;
}
}
$con->close();
}
?>
我不明白。我在这段代码中做错了什么?
我认为是 if ($_FILES['upload']['size'] != 0 ){ 部分引起了问题,但我仍然希望我的用户可以选择上传。
【问题讨论】:
-
您可以创建一个 php.ini,最大音量为我认为 php 配置不允许您发送更多数据。 php.ini `upload_max_filesize = '你的尺寸' post_max_size = '你的尺寸'`
-
确保 PHP 设置
post_max_size至少与您的最大上传大小相同。 -
顺便说一句,
if($filesize > 3000000) {可能应该是< 3000000- 目前您只允许大于 ~3MB 的文件,并在它们低于时输出“太大”错误那个尺寸。 -
@CD001 不。仍然是它给我的警告。
-
嗯,是的,您正在尝试根据下面答案中的 cmets 上传一个 681MB 的文件。我只是指出您的代码逻辑中的一个错误。这是另一个 - 文件扩展名并不意味着什么。将 PDF 从
.pdf重命名为.bob,您仍然可以使用 Acrobat Reader 打开它。