我对我的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
文件是由折叠文件组成的。 )
感谢您的帮助。
答案 0 :(得分:1)
我认为如果PHP正在编写文件,则需要另一个线程来从该文件中读取。 PHP不支持多线程。您可以使用exec()或类似phtreads的扩展名。
我自己还没用过它。但我读了一篇关于它的文章,似乎这可以解决你的问题。
祝你好运。