当前位置:首页 > PHP

php下载进度实现

2026-03-13 09:29:53PHP

PHP 下载进度实现

要实现 PHP 下载进度功能,可以通过以下方法监控和显示下载进度。以下是几种常见的实现方式:

使用 curl 扩展监控进度

PHP 的 curl 扩展支持进度回调函数,可以实时获取下载进度信息。

$url = 'http://example.com/largefile.zip';
$file = 'downloaded.zip';
$fp = fopen($file, 'w+');

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_NOPROGRESS, false);
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, function($resource, $download_size, $downloaded, $upload_size, $uploaded) {
    if ($download_size > 0) {
        $progress = round(($downloaded / $download_size) * 100, 2);
        echo "Download Progress: {$progress}%\n";
    }
});
curl_exec($ch);
curl_close($ch);
fclose($fp);

使用 file_get_contents 分块下载

对于不支持 curl 的环境,可以通过分块下载并计算进度。

$url = 'http://example.com/largefile.zip';
$file = 'downloaded.zip';
$chunk_size = 1024; // 1KB per chunk

$context = stream_context_create([], ['notification' => function($notification_code, $severity, $message, $message_code, $bytes_transferred, $bytes_max) {
    if ($notification_code == STREAM_NOTIFY_PROGRESS && $bytes_max > 0) {
        $progress = round(($bytes_transferred / $bytes_max) * 100, 2);
        echo "Download Progress: {$progress}%\n";
    }
}]);

$data = file_get_contents($url, false, $context);
file_put_contents($file, $data);

前端实时显示进度

结合前端技术(如 AJAX 或 WebSocket),可以将进度实时显示在网页上。

后端 PHP (progress.php):

session_start();
$progress = $_SESSION['download_progress'] ?? 0;
echo json_encode(['progress' => $progress]);

前端 JavaScript:

php下载进度实现

function checkProgress() {
    fetch('progress.php')
        .then(response => response.json())
        .then(data => {
            console.log(`Progress: ${data.progress}%`);
            if (data.progress < 100) {
                setTimeout(checkProgress, 1000);
            }
        });
}
checkProgress();

注意事项

  • 确保服务器支持大文件下载,并配置适当的 php.ini 参数(如 memory_limitmax_execution_time)。
  • 分块下载时需处理网络中断和重试逻辑。
  • 对于敏感文件,需验证下载权限以避免未授权访问。

通过以上方法,可以灵活实现 PHP 下载进度功能,并根据实际需求调整实现方式。

标签: 进度php
分享给朋友:

相关文章

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaSc…

php实现树

php实现树

PHP实现树结构的方法 在PHP中实现树结构通常可以通过递归或迭代的方式完成。以下是几种常见的实现方法: 递归实现树结构 递归是处理树结构的自然方式,尤其适用于具有未知深度的树。 class Tr…

php实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Ratc…

php实现表单

php实现表单

PHP 表单基础实现 创建一个简单的 PHP 表单需要 HTML 表单结构和 PHP 处理脚本。以下是一个完整的示例: HTML 表单部分 (form.html) <form action=…

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 <…

php实现分类

php实现分类

PHP实现分类的方法 数据库设计 创建分类表时,通常需要包含id、名称、父级id等字段。父级id用于实现多级分类结构。 CREATE TABLE categories ( id INT AU…