Quickstart#
This quickstart shows the fastest way to understand what Pathwise can do.
1) Install#
composer require infocyph/pathwise
2) Basic File Lifecycle#
use Infocyph\Pathwise\PathwiseFacade;
$file = PathwiseFacade::at('/tmp/example.txt')->file();
$file->create("v1\n")
->append("v2\n")
->writeAndVerify("v3\n", 'sha256');
$content = $file->read();
3) Mount a Storage and Use Scheme Paths#
use Infocyph\Pathwise\Storage\StorageFactory;
use Infocyph\Pathwise\Utils\FlysystemHelper;
StorageFactory::mount('assets', [
'driver' => 'local',
'root' => '/srv/storage/assets',
]);
FlysystemHelper::write('assets://reports/a.txt', "hello\n");
$text = FlysystemHelper::read('assets://reports/a.txt');
4) Directory Sync with Diff Report#
use Infocyph\Pathwise\DirectoryManager\DirectoryOperations;
$source = new DirectoryOperations('/tmp/source');
$report = $source->syncTo('/tmp/backup', deleteOrphans: true);
// $report has created/updated/deleted entries
5) Upload Validation and Chunk Finalization#
use Infocyph\Pathwise\StreamHandler\UploadProcessor;
$uploader = new UploadProcessor();
$uploader->setDirectorySettings('/tmp/uploads');
$uploader->setValidationProfile('document');
// Single upload:
// $finalPath = $uploader->processUpload($_FILES['file']);
// Chunked:
$state = $uploader->processChunkUpload(
chunkFile: $_FILES['chunk'],
uploadId: 'session-42',
chunkIndex: 0,
totalChunks: 3,
originalFilename: 'video.mp4',
);
if ($state['isComplete']) {
$finalPath = $uploader->finalizeChunkUpload('session-42');
}
6) Compression with Filters + Progress#
use Infocyph\Pathwise\FileManager\FileCompression;
$zip = new FileCompression('/tmp/out.zip', true);
$zip->setGlobPatterns(includePatterns: ['*.txt'], excludePatterns: ['*.tmp'])
->setProgressCallback(function (array $event): void {
// operation, path, current, total
})
->compress('/tmp/source')
->save();
7) Observability and Guardrails#
use Infocyph\Pathwise\FileManager\FileOperations;
use Infocyph\Pathwise\Observability\AuditTrail;
use Infocyph\Pathwise\Security\PolicyEngine;
$policy = (new PolicyEngine())
->allow('*', '*')
->deny('delete', '/tmp/protected/*');
$audit = new AuditTrail('/tmp/pathwise-audit.jsonl');
(new FileOperations('/tmp/data.txt'))
->setPolicyEngine($policy)
->setAuditTrail($audit)
->create('hello');