📜  使用php确定文件上传到服务器的百分比(1)

📅  最后修改于: 2023-12-03 14:49:49.422000             🧑  作者: Mango

使用php确定文件上传到服务器的百分比

很多时候,我们需要在Web应用程序中上传大文件。与其让用户看到一个“等待中”的标志,不如通过上传进度条来让用户知道上传进度。本文将向您介绍如何使用PHP代码确定文件上传到服务器的百分比。

前提条件
  • 了解PHP的基础知识
  • 了解HTML和JavaScript编程语言的基础知识
准备工作

在开始编写代码之前,我们需要准备以下工作:

  • 一些测试文件
  • 一个可以上传文件的HTML表单
  • 一个jQuery插件——jquery.form.js

该插件提供了一个简单的方法来通过Ajax提交表单数据。您可以从以下链接下载:https://github.com/malsup/form。

确定上传百分比

下面是一个演示如何使用PHP代码确定文件上传到服务器的百分比的示例:

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $total = $_FILES['file']['size'];
    $uploaded = $_SESSION['uploaded_bytes'];
    if ($uploaded + $filesize > $total) {
        $uploaded = $total - $filesize;
    } else {
        $uploaded += $filesize;
    }
    $_SESSION['uploaded_bytes'] = $uploaded;
}
$percent = intval($uploaded / $total * 100);
?>

该代码片段通过比较上传到服务器的数据量和总数据量来计算已上传的百分比。

将百分比显示在进度条中
<div class="progress-bar" role="progressbar" aria-valuenow="<?php echo $percent; ?>" aria-valuemin="0" aria-valuemax="100" style="width:<?php echo $percent; ?>%">
    <?php echo $percent; ?>%
</div>

该代码片段将已上传百分比包含在CSS样式width中,以使进度条正确显示。在进度条的标签中,数字(即已上传的百分比)也被动态更新。

完整代码
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>文件上传进度条</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
    <div class="container">
        <form id="myform">
            <div class="form-group">
                <input type="file" name="file" id="file" required>
            </div>
            <button type="submit" class="btn btn-primary">上传文件</button>
        </form>
        <div class="progress">
            <div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"
            style="width:0%">
                0%
            </div>
        </div>
    </div>
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.form/4.2.2/jquery.form.js"></script>
    <script>
        var percent = 0;
        $('#myform').ajaxForm({
            beforeSend: function() {
                var fileSize = $('#file')[0].files[0].size;
                <?php $_SESSION['uploaded_bytes'] = 0;?>
            },
            uploadProgress: function(event, position, total, percentComplete) {
                percent = percentComplete.toFixed(0);
                $('.progress-bar').text(percent + '%').css('width', percent + '%').attr('aria-valuenow', percent);
            },
            complete: function(response) {
                $('.progress-bar').removeClass('active');
            }
        });
    </script>
</body>
</html>

该代码片段演示了如何通过上传进度条显示已上传的百分比。我们在表单提交时,使用jQuery插件jquery.form.js将文件上传到服务器,然后在上传进程中使用uploadProgress事件不断更新进度条中的百分比。

结论

这就是如何使用PHP代码确定文件上传到服务器的百分比的完整指南。使用这些技术,您可以轻松地向Web应用程序中添加上传进度条,使用户可以轻松地了解文件上传的状态。