PHP上传大文件需要很长时间且错误

时间:2017-03-29 08:38:53

标签: php ajax

我通过ajax上传大文件。上传速度很好,但当进度条达到100%时,等待时间很长,然后我收到此错误

无法加载资源:服务器响应状态为504(网关超时) - upload.php

该文件确实出现在目标文件夹中,但没有服务器响应。

这不会发生在较小的文件中。将temp_uploaded_file从Temp文件夹转移到目标文件夹似乎需要很长时间。

  var xhr, hUploadSpeed;
        function sendFile()
        {
            document.getElementById("serverresponse").innerHTML = "";//clear previous server response

            var url = "http://www.example.com/wp-content/themes/theme1/file-upload/upload.php";
            var formData = new FormData(document.getElementById("form1"));
            xhr = new XMLHttpRequest();

            xhr.upload.addEventListener('progress', uploadProgress, false);//EventListener for upload progress
            xhr.addEventListener('abort', uploadAbort, false);//EventListener for abort
            xhr.addEventListener('error', uploadError, false);//EventListener for error
            xhr.addEventListener('load', uploadThrough, false);//EventListener for completed upload

            xhr.open("POST", url, true);
            //xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //no longer necessary here
            xhr.onreadystatechange = function()
            {
                if(xhr.readyState == 4 && xhr.status == 200)
                {
                    document.getElementById("serverresponse").innerHTML = xhr.responseText;
                }
            }

            xhr.send(formData); //Send to server
            hUploadSpeed = setInterval(UploadSpeed, 1000); //per seconds
        }

upload.php的

//You can access the uploaded files through $_FILES 
if(isset($_FILES["file1"]))
    $target_file = $_SERVER['DOCUMENT_ROOT']."/videos/".$_FILES["file1"]['name'];
    move_uploaded_file($_FILES["file1"]["tmp_name"], $target_file);

echo "File uploaded successfully.";

这适用于较小的文件50mb,但当我到达300mb左右的文件。这花了这么长时间?

我有一个带有这个php.ini的专用服务器

upload_max_filesize = 1200M
post_max_size = 1200M
max_input_vars = 1000
memory_limit = -1
max_file_uploads = 20
max_execution_time = 7200
max_input_time = 7200
max_input_vars = 1000

为什么需要这么长时间?我该如何解决?

2 个答案:

答案 0 :(得分:2)

memory_limit中的php.ini也会影响上传。 php.ini是服务器配置文件。

您必须在php.ini文件中增加以下值:

php_value upload_max_filesize 10M
php_value post_max_size 10M
php_value max_input_time 300
php_value max_execution_time 300

然后重新启动服务器。

答案 1 :(得分:1)

我认为你的问题可能就是这个php bug: https://bugs.php.net/bug.php?id=73807 你的php配置没问题。

修正了7和7.1分支。现在不在PHP 5.6中。也许很快 如果可以,请将您的应用升级到7.1(性能也快2倍以上),如果您不能等待php> 30年6月5日