PHP Classes

File: examples/case-studies/files/cleanup/quota_file_cleaner/quota_file_cleaner.php

Recommend this page to a friend!
  Packages of Christos Drogidis   Ascoos OS   examples/case-studies/files/cleanup/quota_file_cleaner/quota_file_cleaner.php   Download  
File: examples/case-studies/files/cleanup/quota_file_cleaner/quota_file_cleaner.php
Role: Example script
Content type: text/plain
Description: Example script
Class: Ascoos OS
A PHP Web 5.0 Kernel for decentralized web and IoT
Author: By
Last change:
Date: 9 months ago
Size: 3,919 bytes
 

Contents

Class file image Download
<?php
/**
 * @ASCOOS-NAME : Ascoos OS
 * @ASCOOS-VERSION : 26.0.0
 * @ASCOOS-SUPPORT : support@ascoos.com
 * @ASCOOS-BUGS : https://issues.ascoos.com
 *
 * @desc <English> Cleans old files from a folder, checks quota, logs actions, and generates a report.
 * @desc <Greek> ????????? ????? ?????? ??? ??????, ??????? quota, ?????????? ????????? ??? ?????????? ???????.
 *
 * @since PHP 8.2.0
 */
declare(strict_types=1);

use
ASCOOS\OS\{
   
Kernel\Files\TFilesHandler,
   
Kernel\Arrays\Events\TEventHandler,
   
Extras\Arrays\Analysis\TArrayAnalysisHandler
};

global
$AOS_TMP_DATA_PATH, $AOS_LOGS_PATH;

// <English> Define configuration for logging and file storage.
// <Greek> ??????? ????????? ??? ????????? ??? ?????????? ???????.
$properties = [
   
'logs' => [
       
'useLogger' => true,
       
'dir' => $AOS_LOGS_PATH . '/',
       
'file' => 'file_cleaner.log'
   
],
   
'file' => [
       
'baseDir' => $AOS_TMP_DATA_PATH . '/cleanup',
       
'quotaSize' => 50000000 // 50MB quota
   
]
];

// <English> Initialize handlers.
// <Greek> ???????????? ?????????.
$files = new TFilesHandler([], $properties['file']);
$events = new TEventHandler([], $properties);
$analysis = new TArrayAnalysisHandler([], $properties);

// <English> Register events.
// <Greek> ?????????? ?????????.
$events->register('cleaner', 'file.deleted', fn($file) => $events->logger->log("Deleted file: $file"));
$events->register('cleaner', 'quota.exceeded', fn() => $events->logger->log("Quota exceeded before cleanup"));
$events->register('cleaner', 'report.generated', fn($path) => $events->logger->log("Report saved: $path"));

// <English> Create cleanup folder if needed.
// <Greek> ?????????? ??????? ?????????? ?? ??????????.
$files->createFolder($properties['file']['baseDir']);

// <English> Check quota before cleanup.
// <Greek> ??????? quota ???? ??? ?????????.
if ($files->isQuotaExceeded($properties['file']['baseDir'])) {
   
$events->trigger('cleaner', 'quota.exceeded');
}

// <English> List files before deletion.
// <Greek> ????? ??????? ???? ?? ????????.
$allFiles = $files->listFilesAndFolders($properties['file']['baseDir']);
$deletedFiles = [];
$deletedSizes = [];

// <English> Delete files older than 30 days.
// <Greek> ???????? ??????? ??????????? ??? 30 ??????.
foreach ($allFiles as $file) {
   
$fullPath = $properties['file']['baseDir'] . '/' . $file;
   
$dates = $files->getFileDates($fullPath);
    if (isset(
$dates['modified']) && strtotime($dates['modified']) < strtotime('-30 days')) {
       
$size = $files->getFileSize($fullPath);
        if (@
unlink($fullPath)) {
           
$deletedFiles[] = $file;
           
$deletedSizes[] = $size;
           
$events->trigger('cleaner', 'file.deleted', $file);
        }
    }
}

// <English> Analyze deleted file sizes.
// <Greek> ??????? ??????? ???????????? ???????.
$analysis->setArray($deletedSizes);
$stats = $analysis->generateStatisticsReport();

// <English> Save report.
// <Greek> ?????????? ????????.
$reportPath = $properties['file']['baseDir'] . '/cleanup_report.json';
$report = [
   
'deleted_files' => $deletedFiles,
   
'statistics' => $stats
];
$files->writeToFileWithCheck(json_encode($report, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), $reportPath);
$events->trigger('cleaner', 'report.generated', $reportPath);

// <English> Output result.
// <Greek> ???????? ?????????????.
echo json_encode($report, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);