【问题标题】:Getting Upload progress with PHP使用 PHP 获取上传进度
【发布时间】:2017-09-09 00:44:00
【问题描述】:

我在使用 PHP 获取文件上传进度时遇到问题,我的网站所在的服务器使用的是 php v5.6。

我还在我的 cpanel 管理器中启用了“上传进度”设置。

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

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

我的表单代码:

    <form id="myForm">
        <input type="hidden" value="myForm" name="<?php echo ini_get("session.upload_progress.name"); ?>">
        <input type="file" id="file" />
        <a href="javascript:uploadFile()">Upload</a>
    </form>
    Upload:
    <div id="process">0%</div>

Javascript 代码: var timer;

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);
        }
    );
}

上传.php

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

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

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

progress.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;
}

不幸的是,在我的 JS 中: $('#process').html(((e.loaded / e.total) * 100).toFixed(1) + "%");

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

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

【问题讨论】:

    标签: javascript php jquery ajax file-upload


    【解决方案1】:

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

    我在 nginx 上运行 Drupal 并警告我

    “您的服务器无法显示文件上传进度。文件上传进度需要运行 PHP 和 mod_php 的 Apache 服务器。”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      • 2010-10-13
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多