PHP ActiveX
PHP ActiveX
Decompress Large Text File in Blocks
See more Compression Examples
Decompresses a large text file in blocks, and compares the restored (decompressed) file with the original to make sure it's correct.Chilkat PHP ActiveX Downloads
<?php
$success = 0;
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// First, let's compress a text file.
// We'll then decompress in blocks, and compare the decompressed with the original file.
// Compress a text file:
$compress = new COM("Chilkat.Compression");
$compress->Algorithm = 'deflate';
$success = $compress->CompressFile('qa_data/hamlet.xml','qa_data/hamlet_compressed.dat');
if ($success == 0) {
print $compress->LastErrorText . "\n";
exit;
}
$fac = new COM("Chilkat.FileAccess");
// Examine the uncompressed and compressed sizes:
$originalPath = 'qa_data/hamlet.xml';
// Note: The FileSize method returns a signed 32-bit integer. If the file is potentially larger than 2GB, call FileSizeStr instead to return
// the size of the file as a string, then convert to an integer value.
print 'uncompressed size: ' . $fac->FileSize($originalPath) . "\n";
print 'compressed size: ' . $fac->FileSize('qa_data/hamlet_compressed.dat') . "\n";
// Decompress in blocks..
$facSrc = new COM("Chilkat.FileAccess");
$facDest = new COM("Chilkat.FileAccess");
$facSrc->OpenForRead('qa_data/hamlet_compressed.dat');
// If we compress in 32K chunks, find out how many blocks there will be.
$blockSize = 32768;
$numBlocks = $facSrc->GetNumBlocks($blockSize);
// Open an output file for the decompressed data.
$restoredPath = 'qa_output/hamlet_restored.xml';
$success = $facDest->OpenForWrite($restoredPath);
if ($success == 0) {
print $facDest->LastErrorText . "\n";
exit;
}
// Assuming numBlocks > 1
$compress->FirstChunk = 1;
$compress->LastChunk = 0;
$i = 0;
while ($i < $numBlocks) {
$compressedBytes = $facSrc->ReadBlock($i,$blockSize);
$decompressedStr = $compress->decompressString($compressedBytes);
$facDest->AppendText($decompressedStr,'utf-8');
$i = $i + 1;
$compress->FirstChunk = 0;
if ($i == ($numBlocks - 1)) {
$compress->LastChunk = 1;
}
}
$facSrc->FileClose();
$facDest->FileClose();
// Examine the size of the restored file.
print 'restored size: ' . $fac->FileSize($restoredPath) . "\n";
// Compare the contents of the original with the restored.
$bEqualContents = $fac->FileContentsEqual($restoredPath,$originalPath);
print 'Contents Equal: ' . $bEqualContents . "\n";
?>