我不想限制用户上传大文件。用户可以上传任何文件大小。当我尝试22 MB的文件大小时,它工作。但是当我尝试200MB文件时,似乎它没有进入if块并且在世界上一直占用上传文件后返回我的输出。 我的工作如下所述。我错过了什么吗?
HTML:
<form method="post" enctype="multipart/form-data" class="form-horizontal" role="form">
<label for="document">Upload your Document</label>
<input type="file" id="document" name="document">
<label for="doc_cat">Document Category:</label>
<select name="doc_cat" id="doc_cat" class="form-control" required>
<option value="">--Select a Category--</option>
<option value="1">Sales</option>
<option value="2">Technical</option>
<option value="3">Pricing</option>
<option value="4">Policies</option>
<option value="5">Other</option>
</select>
<button type="button" class="btn btn-primary" id="upload" name="upload">Upload</button>
</form>
JQUERY / AJAX:
<script type="text/javascript">
$(document).ready(function () {
$('#upload').click(function () {
var formData = new FormData($('form')[0]);
var that = this;
$.ajax({
url: 'upload-document-proccess.php', //Server script to process data
type: 'POST',
data: formData,
async: false,
beforeSend: function() {
$("#loading-image").show();
},
success: function (msg) {
$("#loading-image").hide();
$("#display-return-msg").html(msg);
$("#display-return-msg").fadeIn("slow").delay(5000).fadeOut("slow");
},
cache: false,
contentType: false,
processData: false
});
$('form')[0].reset();
return false;
});
});
</script>
上传文档-proccess.php:
if(isset($_POST) && $_FILES['document']['size'] > 0)
{
$category_id = $_POST['doc_cat'];
$doc_desc = htmlspecialchars($_POST['doc_desc'],ENT_QUOTES);
switch ($category_id) {
case 1:
$category="Sales";
break;
case 2:
$category="Technical";
break;
case 3:
$category="Pricing";
break;
case 4:
$category="Policies";
break;
case 5:
$category="Other";
break;
default:
# code...
break;
}
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["document"]["name"]);
$fileName = $_FILES['document']['name'];
$tmpName = $_FILES['document']['tmp_name'];
$fileSize = $_FILES['document']['size'];
$fileType = $_FILES['document']['type'];
$fp = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
if (move_uploaded_file($_FILES["document"]["tmp_name"], $target_file)) {
$msg = "The file ". basename( $_FILES["document"]["name"]). " has been uploaded to ".$category." Category";
} else {
echo "Sorry, there was an error uploading your file.";
}
fclose($fp);
if(!get_magic_quotes_gpc())
{
$fileName = addslashes($fileName);
}
try {
$sql = "INSERT INTO document (doc_name, doc_type, doc_size, user_id, doc_category_id, doc_date, doc_desc)
VALUES ('$fileName', '$fileType', '$fileSize', '$user_id', '$category_id', now(), '$doc_desc')";
// use exec() because no results are returned
$conn->exec($sql);
?><script type="text/javascript">
var msg = '<?php echo $msg; ?>';
$(document).ready(function(){
$("#display-return-msg").html(msg);
$("#display-return-msg").fadeIn("slow").delay(5000).fadeOut("slow");
});
</script>
<?php
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
//echo "<br>File $fileName uploaded<br>";
}else{
echo "Please select File to upload.";
}
?>
在&#39;#display-return-msg&#39; id,它给了我&#34;请选择要上传的文件&#34;当我上传200MB文件。当我上传22 MB文件时,我得到了&#39; msg&#39;变量是正确的。请建议我该怎么办?
答案 0 :(得分:1)
有很多设置可能会限制您上传的文件大小。这是一个基于Windows上XAMPP安装的示例。但它在linux上应该非常相似 发现于http://mewbies.com/how_to_install_setup_apache_xampp.htm:
改变允许上传的文件大小:
要允许大文件上传,您必须更改PHP&amp; Apache conf文件,我们将使用 以600MB文件大小为例,根据您的需要进行更改:
编辑此文件:D:\ xampp \ php \ php.ini搜索:upload_max_filesize
更改 于:
upload_max_filesize = 600M搜索:post_max_size
有这个:
post_max_size = 8M
更改为(必须大于upload_max_filesize):
post_max_size = 700M搜索:memory_limit
有这个:memory_limit = 128M
如果您不想要任何限制,请更改为:
memory_limit = -1
或者改为(它必须大于post_max_size):
memory_limit = 800M搜索:max_execution_time
这个:max_execution_time = 30
改为例如:
max_execution_time = 9600搜索(正好在max_execution_time以下):max_input_time = 60
这个:max_input_time = 60
更改为:max_input_time = 3600完成,保存更改。
编辑此文件:D:\ xampp \ apache \ conf \ extra \ httpd-default.conf
搜索:LimitRequestBody
如果你的conf没有这条线;加上它 有这个:LimitRequestBody 102400
改为:
LimitRequestBody 600000000你将它设置为0,意味着无限制,最多2147483647字节(2GB)
重新启动您的网络服务器。
答案 1 :(得分:0)
你可以在第一行测试使用这一行
echo phpinfo();exit;
找到并检查&#39; max_file_uploads&#39;如果它确实少于你的要求,那就通过写在页面的第一页
来增加它ini_set('max_file_uploads', 'as per your need size')
答案 2 :(得分:0)
要将大文件上传到Web服务器,需要在php中修改一些设置(使用.htaccess)。两个php配置选项,最大上传大小:upload_max_filesize和post_max_size。对于200兆字节的文件大小,两者都可以设置为“200M”。
答案 3 :(得分:-1)
您需要在php.ini文件中增加上传限制
编辑:您应该要求主持人允许您为上传限制编写php ini配置,如果他们为您执行此操作将能够执行此操作,如果他们不能或不希望您不会能够做到这一点。
启用此功能后,您可以:
1.create local copy of php.ini in folder where is script which performs upload
2.you can do it in code, example for turning of erro reporting:
error_reporting(-1);
3.you can set this in cpanel for this account if is possible/enabled.