libriciel / cakephp-filesystem
Manipulations de fichiers avec transaction
Package info
gitlab.adullact.net/Libriciel/archivage/cakephp-filesystem.git
Type:cakephp-plugin
pkg:composer/libriciel/cakephp-filesystem
Requires
- php: ^8.3
- ext-json: *
- symfony/filesystem: ^7.0|^5.0|^6.0|^7.0
Requires (Dev)
- ext-mbstring: *
- cakephp/cakephp: ~5.0.9
- phpunit/phpunit: ^9.6.20
Suggests
- cakephp/cakephp: Gestion de la configuration et du Log, lancement du shell
Provides
None
Conflicts
None
Replaces
None
README
Manipulation de fichiers (copie, déplacement, suppression, écriture) avec ou sans transaction : en cas de rollback, explicite ou à l'arrêt du script, les opérations effectuées depuis le début de la transaction sont annulées.
Dépendance de
| Projet | Build | Coverage |
|---|---|---|
| asalae | ||
| versae | ||
| refae | ||
| asalae-core | ||
| cakephp-datacompressor |
Prérequis
- PHP
~7.4 || ~8.1 || ~8.2 || ~8.3avec l'extensionjson
Installation
composer require libriciel/cakephp-filesystem:dev-master
Dans Application::bootstrap() (charge la commande filesystem) :
$this->addPlugin('Libriciel/Filesystem');
Pour bénéficier des traductions (exceptions et commande), ajouter le dossier Locale du plugin aux chemins de l'application :
config/app_default.php (asalae)
'locales' => [
RESOURCES . 'locales' . DS,
ROOT . DS . 'vendor' . DS . 'libriciel' . DS . 'cakephp-filesystem' . DS . 'src' . DS . 'Locale' . DS,
],
Configuration (facultative) :
FilesystemUtility.useShred: supprime les fichiers avecshred(suppression sans possibilité de récupération, plus longue)FilesystemUtility.tmpDir: dossier temporaire des transactions (par défautApp.paths.data./tmp, sinon le dossier temporaire du système)
config/app_default.php (asalae)
'FilesystemUtility' => [
'useShred' => true,
],
Utilisation
Utility
Libriciel\Filesystem\Utility\Filesystem : méthodes statiques copy(), rename(), remove(), mkdir(), dumpFile(), shred(), listFiles()… (basées sur symfony/filesystem) et transactions begin(), commit(), rollback().
- Les transactions sont nommées (
defaultpar défaut), ce qui permet d'en imbriquer plusieurs. - Une transaction non validée est annulée à la destruction de l'instance (fin du script) ;
rollbackAll()annule toutes les transactions en cours du processus. useShred()etsetRemoveMethod()changent la méthode de suppression à la volée.
src/Model/Entity/Archive.php (asalae)
Filesystem::begin();
try {
$files = $this->getArchiveFiles();
$files[] = self::createReadme($tempFolder);
$zipFilename = $this->_getZip();
DataCompressor::compress($files, $zipFilename);
Filesystem::commit();
return $zipFilename;
} catch (Exception $e) {
Filesystem::rollback();
throw $e;
}
src/Model/Table/TransfersTable.php (asalae)
Filesystem::begin('delete-transfer');
Filesystem::remove($dir);
Filesystem::commit('delete-transfer');
Command
filesystem : effectue les rollbacks restés en suspens, par exemple après un arrêt brutal du serveur (transactions des processus qui ne tournent plus).
bin/cake filesystem
Tests
vendor/bin/phpunit