cleverage/flysystem-process-bundle
Install via Composer:
composer require cleverage/flysystem-process-bundle
Register the bundle in your Symfony config/bundles.php:
return [
// ...
Clevage\FlysystemProcessBundle\FlysystemProcessBundle::class => ['all' => true],
];
Configure in config/packages/cleverage_flysystem_process.yaml (if needed). First use case: Process files in a Flysystem adapter (e.g., local, S3) with Symfony’s Process component integration. Example:
use Clevage\FlysystemProcessBundle\Process\ProcessAdapter;
use League\Flysystem\Filesystem;
$filesystem = new Filesystem($adapter);
$processAdapter = new ProcessAdapter($filesystem);
$processAdapter->run('ls -la'); // Execute shell commands on remote storage
ProcessAdapter to execute shell commands on remote storage (e.g., sftp://, aws.s3://).Process component for command execution, with Flysystem handling file I/O.ProcessAdapter::run() for one-off commands.read(), write()) for pre/post-processing:
$processAdapter->write('file.txt', 'content');
$processAdapter->run('chmod +x file.txt');
ffmpeg, imagemagick, or custom scripts on files stored in cloud/SFTP.npm, docker) against files in object storage.Register the adapter as a service in Symfony:
# config/services.yaml
services:
Clevage\FlysystemProcessBundle\Process\ProcessAdapter:
arguments:
$filesystem: '@oneup_flysystem.my_adapter'
php and symfony/* packages in composer.json:
"require": {
"php": "^8.2",
"symfony/*": "^7.4"
}
Process error output:
$process = $processAdapter->run('invalid_command');
if (!$process->isSuccessful()) {
echo $process->getErrorOutput(); // Debug here
}
whoami or pwd first:
$processAdapter->run('whoami'); // Verify remote user context
$processAdapter->run('cat largefile.txt | gzip > largefile.gz', null, ['input' => fopen('php://input', 'r')]);
ls) to avoid repeated remote calls.ProcessAdapter to add domain-specific logic:
class MyProcessAdapter extends ProcessAdapter {
public function optimizeImages(string $path): void {
$this->run("convert {$path} -quality 80 optimized_{$path}");
}
}
kernel.terminate to clean up temporary files created by commands.Process constructor:
$processAdapter->run('echo $MY_VAR', null, ['env' => ['MY_VAR' => 'value']]);
$processAdapter->run('long_running_command', null, ['timeout' => 30]);
How can I help you explore Laravel packages today?