使用PHP获取上传进度

时间:2017-04-13 03:24:11

标签: javascript php jquery ajax file-upload

我无法使用PHP获取文件上传的进度,我的网站托管的服务器使用的是php v5.6。

我也有#upload; uploadprogress'在我的cpanel管理器中启用了设置。

我尝试按照本教程: Tracking Upload Progress with PHP and JavaScript

但我将其与其他一些使用ajax请求处理文件上传的代码合并。

我的表单代码:

function uploadFile() {
    var uploadFile = $("#file")[0].files[0];
    timer = setInterval(getStatus,1000);

    $.ajax( 
        {
            url : "upload.php",
            type: 'POST',
            data : new FormData($('form')[0]),
            cache: false,
            contentType: false,
            processData: false,

            xhr: function() {
                var myXhr = $.ajaxSettings.xhr();
                if (myXhr.upload) {
                    // For handling the progress of the upload
                    myXhr.upload.addEventListener('progress',
                        function(e) {
                            if (e.lengthComputable) {
                                if (e.loaded < e.total) {
                                    $('#process').html(((e.loaded / e.total) * 100).toFixed(1) + "%");
                                } else {
                                    $('#process').html("Processing upload, please wait.");
                                }
                            }
                        } , false);
                }

                return myXhr;
            },
            success: function (response) {
                $('#process').html(response);
                clearTimeout(timer);
            }
        }
    );
}

function getStatus() {
    $.get("progress.php",
        function(response) {
            $("#process2").html(response);
        }
    );
}

Javascript代码:     var timer;

session_start();
$uploadedFile = $_FILES["file"];

move_uploaded_file($uploadedFile['tmp_name'],$uploadedFile["name"]);

echo $uploadedFile["name"]." was uploaded";

upload.php的

session_start();

$key = ini_get("session.upload_progress.prefix") . "myForm";
if (!empty($_SESSION[$key])) {
    $current = $_SESSION[$key]["bytes_processed"];
    $total = $_SESSION[$key]["content_length"];
    echo $current < $total ? ceil($current / $total * 100) : 100;
}
else {
    echo 100;
}

progress.php

CloudBlockBlob

不幸的是在我的JS中:     $(&#39; #process&#39;)。html(((e.loaded / e.total)* 100).toFixed(1)+&#34;%&#34;);

只获取获取请求所需的时间,而不是实际上传文件。

我希望我提供了足够的信息来获得帮助。

1 个答案:

答案 0 :(得分:0)

您必须确保您的服务器使用mod_php运行PHP。

我在nginx上运行Drupal并警告我

&#34;您的服务器无法显示文件上传进度。文件上传进度需要运行带有mod_php的PHP的Apache服务器。&#34;