Recipes#
Short end-to-end examples for common real workloads.
Recipe 1: Ingest -> Audit -> Retain#
Goal:
Validate uploads.
Record operations.
Keep only latest artifacts.
use Infocyph\Pathwise\Observability\AuditTrail;
use Infocyph\Pathwise\Retention\RetentionManager;
use Infocyph\Pathwise\StreamHandler\UploadProcessor;
$uploader = new UploadProcessor();
$uploader->setDirectorySettings('/tmp/uploads');
$uploader->setValidationProfile('document');
$audit = new AuditTrail('/tmp/audit.jsonl');
$finalPath = $uploader->processUpload($_FILES['file']);
$audit->log('upload.processed', ['path' => $finalPath]);
$retention = RetentionManager::apply('/tmp/uploads', keepLast: 50, maxAgeDays: 30);
$audit->log('retention.applied', $retention);
Recipe 2: Mirror + Zip + Checksum#
Goal:
Mirror a working directory to backup.
Create archive.
Verify archive checksum.
use Infocyph\Pathwise\DirectoryManager\DirectoryOperations;
use Infocyph\Pathwise\FileManager\FileOperations;
$source = new DirectoryOperations('/tmp/project-output');
$syncReport = $source->syncTo('/tmp/project-backup', deleteOrphans: true);
$source->zip('/tmp/project-output.zip');
$zipFile = new FileOperations('/tmp/project-output.zip');
$expected = hash('sha256', $zipFile->read());
$isValid = $zipFile->verifyChecksum($expected, 'sha256');
Recipe 3: Duplicate Scan + Optional Dedupe#
Goal:
Find duplicate files by content hash.
Optionally deduplicate via hard links where possible.
use Infocyph\Pathwise\Indexing\ChecksumIndexer;
$duplicates = ChecksumIndexer::findDuplicates('/tmp/media', 'sha256');
if ($duplicates !== []) {
$dedupeReport = ChecksumIndexer::deduplicateWithHardLinks('/tmp/media');
// linked[] and skipped[] in report
}
Recipe 4: Mounted Storage Workflow#
Goal:
Work against mounted storage with the same Pathwise APIs.
use Infocyph\Pathwise\FileManager\FileCompression;
use Infocyph\Pathwise\Storage\StorageFactory;
use Infocyph\Pathwise\Utils\FlysystemHelper;
StorageFactory::mount('mnt', [
'driver' => 'local',
'root' => '/srv/storage',
]);
FlysystemHelper::write('mnt://source/a.txt', 'A');
FlysystemHelper::write('mnt://source/b.txt', 'B');
(new FileCompression('mnt://archives/source.zip', true))
->compress('mnt://source')
->save();
(new FileCompression('mnt://archives/source.zip'))
->decompress('mnt://restored');