PHP Extension Requires Chilkat v11.0.0+
PHP Extension
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 Extension Downloads
<?php
include("chilkat.php");
$success = false;
// 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 CkCompression();
$compress->put_Algorithm('deflate');
$success = $compress->CompressFile('qa_data/hamlet.xml','qa_data/hamlet_compressed.dat');
if ($success == false) {
print $compress->lastErrorText() . "\n";
exit;
}
$fac = new CkFileAccess();
// 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 CkFileAccess();
$facDest = new CkFileAccess();
$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 == false) {
print $facDest->lastErrorText() . "\n";
exit;
}
$compressedBytes = new CkByteData();
// Assuming numBlocks > 1
$compress->put_FirstChunk(true);
$compress->put_LastChunk(false);
$i = 0;
while ($i < $numBlocks) {
$success = $facSrc->ReadBlock($i,$blockSize,$compressedBytes);
$decompressedStr = $compress->decompressString($compressedBytes);
$facDest->AppendText($decompressedStr,'utf-8');
$i = $i + 1;
$compress->put_FirstChunk(false);
if ($i == ($numBlocks - 1)) {
$compress->put_LastChunk(true);
}
}
$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";
?>