PHP实现文件下载进度条

问题: 大型文件的下载过程可能很慢,没有进度信息会让用户感到不耐烦。

解决方案:

使用 PHP 的 stream 扩展,我们可以创建包含进度信息的自定义下载脚本。

代码:

// 打开用于下载的文件
$file = fopen('https://example.com/large-file.zip', 'rb');

// 创建一个新的输出流
$output = fopen('large-file.zip', 'wb');

// 设置缓冲大小 (可选)
stream_set_chunk_size($output, 1024);

// 复制文件内容,并显示进度条
$i = 0;
while (($data = fread($file, 1024)) !== false) {
    fwrite($output, $data);
    $i += strlen($data);

    // 计算百分比进度
    $progress = round(($i / filesize('https://example.com/large-file.zip')) * 100, 2);

    // 显示进度条
    echo "\rDownloading: [".str_repeat('=', round($progress)).">".str_repeat(' ', 100 - round($progress))."] {$progress}%";
}

fclose($file);
fclose($output);

如何工作:

  • 打开远程文件用于读取。
  • 创建一个用于写入本地文件的输出流。
  • 循环读取远程文件内容并将其写入本地文件。
  • 在每次循环中,计算下载进度并显示进度条。
  • 完成下载后,关闭文件流。

Was this helpful?

0 / 0

发表回复 0