当前位置:首页 > 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记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searchT…

php搜索功能实现

php搜索功能实现

实现基本的PHP搜索功能 使用MySQL数据库和PHP实现简单的关键词搜索功能。需要确保数据库中有可供搜索的表和数据。 // 连接数据库 $conn = new mysqli('localhost'…

php实现评论功能

php实现评论功能

数据库设计 创建评论表(示例结构): CREATE TABLE `comments` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id`…

php 实现路由

php 实现路由

PHP 实现路由的方法 在 PHP 中实现路由功能可以通过多种方式完成,以下是几种常见的实现方法: 使用原生 PHP 实现简单路由 通过解析 URL 并匹配对应的处理逻辑,可以实现基本的路由功能。以…

php 实现表单验证

php 实现表单验证

表单验证基础方法 使用内置函数和条件判断进行基础验证,例如检查空值、长度限制等: $name = $_POST['name'] ?? ''; $email = $_POST['email'] ??…