超大文件上传不使用PHP / HTML

时间:2015-11-03 09:47:41

标签: php jquery html ajax html5

我不想限制用户上传大文件。用户可以上传任何文件大小。当我尝试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;变量是正确的。请建议我该怎么办?

4 个答案:

答案 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.