【问题标题】:PHP - determine how many bytes sent over httpPHP - 确定通过 http 发送的字节数
【发布时间】:2010-12-03 05:45:31
【问题描述】:

是否可以在 PHP 中计算传输到客户端的字节数?例如,如果我正在输出一个 10 MB 的文件,有没有办法找出是否所有 10 MB 都发送到了客户端,或者查看客户端是否在中途中断了传输?我知道 Apache 之后会记录这个,但我想访问 PHP 中的数据。

【问题讨论】:

  • 你想制作一个进度条或类似的东西吗?
  • 我只是想将文件标记为完全下载,然后将它们从列表中删除。问题是 file_get_contents(),它没有捕捉到用户的中断。如果您使用 fread() 并循环,您可以捕获它,然后使用 ftell() 大致计算发送了多少字节。 (很抱歉在我最终自己解决问题时发布了这个问题)

标签: php byte file-transfer


【解决方案1】:

【讨论】:

    【解决方案2】:

    这就是我最终做的事情(感谢 Gumbo):

    ignore_user_abort(true);
    
    $handle = fopen($file_path, 'r');
    while ( ! feof($handle)) {
        echo fread($handle, 4096);
        if (connection_aborted()) {
            $transfer_success = false;
            $bytes_transferred = ftell($handle);
            break;
        }
    }
    fclose($handle);
    

    【讨论】:

    • 这仍然是你这样做的方式吗?
    • 是的。锻炼得足够好。为什么?
    • 我想通过数据传输量来限制 API 请求下载。感谢您的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 2018-05-04
    相关资源
    最近更新 更多