创建Tar文件时Php Stream到客户端

时间:2014-03-21 08:53:52

标签: php download filestream tar phar

我对我的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文件是由折叠文件组成的。 )

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

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

祝你好运。