当前位置:  开发笔记 > 编程语言 > 正文

PHP中的大文件的零碎bzcompression

如何解决《PHP中的大文件的零碎bzcompression》经验,为你挑选了0个好方法。

由于在bzcompress中实现,因此在PHP中创建bzip2归档数据非常容易.在我目前的应用程序中,我完全不能简单地将输入文件读入字符串然后调用bzcompressbzwrite.PHP文档没有说清楚对bzwrite相对少量数据的连续调用是否会产生与一次压缩整个文件时相同的结果.我的意思是一些东西

$data = file_get_contents('/path/to/bigfile');
$cdata = bzcompress($data);

我使用下面显示的例程尝试了零碎的bzcompression

function makeBZFile($infile,$outfile)
{
 $fp = fopen($infile,'r');
 $bz = bzopen($outfile,'w');
 while (!feof($fp))     
 {
  $bytes = fread($fp,10240);
  bzwrite($bz,$bytes);
 }
 bzclose($bz);
 fclose($fp);
}

function unmakeBZFile($infile,$outfile)
{
 $bz = bzopen($infile,'r');
 while (!feof($bz))
 {
  $str = bzread($bz,10240);
  file_put_contents($outfile,$str,FILE_APPEND);
 }
}

set_time_limit(1200);
makeBZFile('/tmp/test.rnd','/tmp/test.bz');
unmakeBZFile('/tmp/test.bz','/tmp/btest.rnd'); 

为了测试这段代码,我做了两件事

我使用makeBZFileunmakeBZFile压缩然后解压缩SQLite数据库 - 这是我最终需要做的.

我创建了一个填充随机数据的50Mb dd if=/dev/urandom of='/tmp.test.rnd bs=50M count=1

在这两种情况下,我都进行了一次diff original.file decompressed.file,发现两者是相同的.

一切都很好,但我不清楚为什么这是有效的.PHP文档声明bzread(bzpointer,length)读取UNCOMPRESSED数据的最大length字节数.如果我下面的代码是回环那是因为我强迫和大小为10240个字节.bzwitebzread

我看不到的是如何bzread知道如何获取UNCOMPRESSED数据的lenth字节.我查看了bzip2文件的格式.我看不出有什么东西有助于轻松建立.bz文件块的未压缩数据长度.

我怀疑我对这是如何工作的理解存在差距 - 或者下面我的代码执行正确的零碎压缩这一事实纯粹是偶然的.

我非常感谢这里的一些解释.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有