【问题标题】:Php Stream to client while creating Tar file创建 Tar 文件时将 PHP 流传输到客户端
【发布时间】:2014-03-21 17:19:00
【问题描述】:

我对我的 PHP 应用程序有一个特殊要求。

基本上,用户可以请求将其数据备份为TAR 文件。此存档包含一个 JSON 文件,其中包含数据库信息(配置文件、各种数据等)和一个目录,其中包含用户自注册以来上传的所有文件。

到目前为止,我已经编写了以下代码:

$phar = new PharData($output_filename);

$table_dump = self::dump_tables($customers);

$manifest = array();
$manifest['generation_time']  = time();
$manifest['manifest_version'] = self::DUMP_VERSION;

$phar->addFromString(self::MANIFEST_FILE, json_encode($manifest) );
$phar->addFromString(self::DATA_FILE, json_encode($table_dump) );

sql::select(file::sql_table, sql::true, file::sql_key);
$files_list = sql::fetch_all();
if ($files_list) foreach($files_list as $file_guid) {
  $file_path = file::forge_file_path($file_guid);
  if(is_file($file_path))
    $phar->addFile($file_path, basename($file_path));
}

return $output_filename;

它成功返回了一个有效路径,其中包含我可以下载的有效TAR 文件。今天,通过PHP Header 自动开始下载,但打包TAR 需要很长时间。

我想知道的是:是否可以在创建文件时开始下载文件?(因为TAR 文件由折叠文件组成。)

感谢您的帮助。

【问题讨论】:

  • 只是猜测:您是否尝试使用php://output 作为文件名?
  • 你好,是的,它根本不起作用。

标签: php download filestream tar phar


【解决方案1】:

我认为如果 PHP 正在写入文件,您将需要另一个线程来读取该文件。 PHP 不支持多线程。您可能可以使用 exec() 或 phtreads 之类的扩展。

我自己还没用过。但我读了一篇关于它的文章,看来这可以解决你的问题。

祝你好运。

【讨论】:

    猜你喜欢
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 2021-03-09
    • 1970-01-01
    • 2017-03-12
    • 2019-04-15
    相关资源
    最近更新 更多