加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP即时刷新xml到zipfile并推送下载

发布时间:2020-12-13 16:10:55 所属栏目:PHP教程 来源:网络整理
导读:我根据来自我的数据库(xmltv格式)的信息创建了一个xml文件.这些xml文件可能非常大 – 25-70mb是正常的.现在我像这样在飞行中创建xml文件: $xmlWriter = new XMLWriter();$xmlWriter-openURI('php://output'); 并通过循环刷新以防止内存溢出.我还设置标题以
我根据来自我的数据库(xmltv格式)的信息创建了一个xml文件.这些xml文件可能非常大 – 25-70mb是正常的.现在我像这样在飞行中创建xml文件:

$xmlWriter = new XMLWriter();
$xmlWriter->openURI('php://output');

并通过循环刷新以防止内存溢出.我还设置标题以将内容推送到下载:

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $config->filename . '.xml"');

我希望能够压缩/ gzip xml因为大小.这是可能的吗?我之前使用过PHPZip,它适用于文件,但我不知道我是否可以直接将xml输出写入zip?

解决方法

如果我理解正确,目标是动态创建gzip压缩数据,而无需在服务器上创建文件.这可以使用 deflate_initdeflate_add,但需要PHP 7.

$gzip = deflate_init(ZLIB_ENCODING_GZIP,array('level' => 9));
$data = deflate_add($gzip,"my",ZLIB_NO_FLUSH);
$data .= deflate_add($gzip,"data",ZLIB_FINISH);

使用deflate_add,我们可以多次添加更多数据(模式应该是最后一个块的ZLIB_FINISH).

我们可以使用XMLWriter::openMemory(将数据存储在内存中)和XMLWriter::flush来调整此方法,以便在生成时压缩xml元素,并动态创建.gz文件的内容.例如这段代码:

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="file.gz"');

$xmlWriter = new XMLWriter();
$xmlWriter->openMemory();
$xmlWriter->startDocument('1.0','UTF-8');
$gzip = deflate_init(ZLIB_ENCODING_GZIP,array('level' => 9));

for ($i = 0; $i < 10; $i++) {
    $xmlWriter->writeElement("element",$i);
    $data = $xmlWriter->outputMemory();
    echo deflate_add($gzip,$data,ZLIB_NO_FLUSH);
}
echo deflate_add($gzip,"",ZLIB_FINISH);

创建xml元素,逐个压缩并输出它们,而不使用太多内存或任何文件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读