Sample code for 30+ languages & platforms
PHP

Compress and Encrypt a Large File (Low and Constant Memory Footprint)

See more Compression Examples

Demonstrates how to compress and encrypt a large file such that the memory footprint remains low and constant.

Note: This example requires Chilkat v9.5.0.99 or greater.

Chilkat PHP Downloads

Chilkat2 PHP
<?php

use Chilkat2\Compression;
use Chilkat2\Crypt2;
use Chilkat2\JsonObject;

// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

$compress = new Compression();
$compress->Algorithm = 'deflate';

// Set encryption params.
// The possible values are the same as for the corresponding properties in the Chilkat Crypt2 class/object.
// The encoded IV and Key must be specified as hex.
$json = new JsonObject();
$json->UpdateString('cryptAlgorithm', 'aes');
$json->UpdateString('cipherMode', 'cbc');
$json->UpdateInt('keyLength', 128);
$json->UpdateInt('paddingScheme', 0);
$json->UpdateString('encodedIV', '000102030405060708090A0B0C0D0E0F');
$json->UpdateString('encodedKey', '000102030405060708090A0B0C0D0E0F');

// Do file-to-file compression+encryption in a single call.
$inPath = 'qa_data/largeFile.dat';
$outPath = 'c:/temp/qa_output/compressed_encrypted.dat';
try {
    $compress->CompressEncryptFile($json, $inPath, $outPath);

    // We can do file-to-file decrypt/decompress like this:
    $inPath2 = $outPath;
    $outPath2 = 'c:/temp/qa_output/restored.dat';
    $compress->DecryptDecompressFile($json, $inPath2, $outPath2);

    // Note: The above decrypt + decompress is the equivalent of doing the same in these two steps:
    $crypt = new Crypt2();
    $crypt->CryptAlgorithm = 'aes';
    $crypt->CipherMode = 'cbc';
    $crypt->KeyLength = 128;
    $crypt->PaddingScheme = 0;
    $crypt->SetEncodedIV('000102030405060708090A0B0C0D0E0F', 'hex');
    $crypt->SetEncodedKey('000102030405060708090A0B0C0D0E0F', 'hex');

    $decryptedPath = 'c:/temp/qa_output/decrypted.dat';
    $crypt->CkDecryptFile($inPath2, $decryptedPath);

    $outPath3 = 'c:/temp/qa_output/restored_in_two_steps.dat';
    $compress->DecompressFile($decryptedPath, $outPath3);
} catch (\Chilkat2\Exception $e) {
    echo $e->getMessage(), "\n";
    exit;
}

echo "Success.\n";