【问题标题】:PHP - Expose own size to client (so the client knows how much it is downloading)PHP - 向客户端公开自己的大小(以便客户端知道它正在下载多少)
【发布时间】:2011-09-29 23:19:52
【问题描述】:

我的 PHP 脚本正在输出一个 .sql 文件的内容,在它被我的 Delphi 桌面客户端的 POST 请求调用之后。

这是正在发生的事情:

  1. 我的桌面客户端向我的 PHP 脚本发送一个 POST 请求。
  2. 脚本然后调用mysqldump 并生成一个文件 - xdb_backup.sql
  3. 脚本然后include "xdb_backup.sql"; 将打印并将其返回到桌面客户端,然后删除 SQL 文件。

问题是,SQL 文件的大小可能不同(为了测试,我生成了一个 6 mb 的文件)。我希望我的桌面客户端能够显示进度,但是 PHP 脚本没有公开它的大小,所以我没有要分配的 Progressbar.Max 值。

如何让我的 PHP 脚本让客户知道它有多大 before the whole thing is over

注意:下载 SQL 文件不是一种选择,因为脚本必须销毁它。 :)

【问题讨论】:

  • 我能看到这样做的唯一方法是根据有多少数据字段以及它们往往有多大做出粗略的近似。不过很有意思q+1
  • @Obto 谢谢你的 +1 :) - 答案很简单。 :)

标签: php sql delphi dynamic size


【解决方案1】:

你会的

$fsize = filesize($file_path); 

其中 $file_path 将是生成的文件 xdb_backup.sql 的路径,

获取服务器中的文件大小并返回带有以下行的标题。

header("Content-Length: " . $fsize);

看看http://www.hotscripts.com/forums/php/47774-download-script-not-sending-file-size-header-corrupt-files-since-using-remote-file-server.html,它解释了一个下载 php 脚本。

【讨论】:

    【解决方案2】:

    您必须使用 header 函数发送 Content-Length 标头。像这样的:

    header('Content-Length: '.filesize('yourfile.sql'));

    您可能希望使用readfile 而不是包含来发送文件。

    【讨论】:

    • 那么客户端在开始处理sql文件之前会知道大小吗?
    【解决方案3】:

    可以设置Content-Length header 的大小为xdb_backup.sql

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 2020-12-17
      • 1970-01-01
      相关资源
      最近更新 更多