2024-03-17 12:46:38 +01:00
< ? php
2024-03-18 08:49:16 +01:00
/*
Ce script PHP est conçu pour être appelé via une requête HTTP GET avec une clé spécifique pour déclencher la création d ' une archive ZIP de sauvegarde .
Exemple d ' appel dans une URL :
2024-03-18 19:05:37 +01:00
http :// example . com / chemin / vers / autobackup . php ? key = your_secret_key & filter = site
2024-03-18 08:49:16 +01:00
2024-03-18 19:05:37 +01:00
La clé doit être fournie en tant que paramètre " key " dans l 'URL et correspondre à celle stockée dans le fichier "data.key" pour que la création de l' archive soit autorisée . Si la clé est valide , le script parcourt le répertoire spécifié en fonction du paramètre " filter " et ajoute les fichiers à l 'archive ZIP. Si la clé est invalide ou absente, le script renvoie une réponse avec le code d' erreur 401 Unauthorized .
Le paramètre " filter " en GET permet de spécifier le filtre à appliquer lors de la création de l 'archive. Sa valeur peut être "file" ou "data". Si le paramètre n' est pas spécifié , le filtre est vide par défaut , ce qui signifie que tous les fichiers seront inclus dans l ' archive .
2024-03-18 08:49:16 +01:00
*/
// Vérification de la clé
2024-03-18 19:05:37 +01:00
if ( isset ( $_GET [ 'key' ])) {
2024-03-18 08:49:16 +01:00
$key = $_GET [ 'key' ];
$storedKey = file_get_contents ( 'data.key' );
if ( $key !== $storedKey ) {
2024-03-18 19:05:37 +01:00
http_response_code ( 401 ); // Clé invalide, renvoie une réponse avec le code d'erreur 401 Unauthorized
2024-03-18 17:42:31 +01:00
exit ();
2024-03-18 08:49:16 +01:00
}
2024-03-18 19:05:37 +01:00
// Définition du filtre par défaut
2024-03-18 19:23:23 +01:00
$filter = [ 'backup' , 'tmp' , 'i18n' ];
2024-03-18 19:05:37 +01:00
// Tableau de correspondance entre les valeurs de "filter" et les répertoires à inclure
$filterDirectories = [
'file' => [ 'backup' , 'tmp' , 'file' ],
2024-03-18 19:12:38 +01:00
'data' => [ 'backup' , 'tmp' , 'data' ],
2024-03-18 19:05:37 +01:00
];
// Vérification et traitement du paramètre "filter" en GET
if ( isset ( $_GET [ 'filter' ]) && isset ( $filterDirectories [ $_GET [ 'filter' ]])) {
$filter = $filterDirectories [ $_GET [ 'filter' ]];
}
// Création du ZIP
2024-03-18 17:42:31 +01:00
$fileName = date ( 'Y-m-d-H-i-s' , time ()) . '-rolling-backup.zip' ;
$zip = new ZipArchive ();
$zip -> open ( '../../../../site/backup/' . $fileName , ZipArchive :: CREATE | ZipArchive :: OVERWRITE );
$directory = '../../../../site' ;
$files = new RecursiveIteratorIterator (
new RecursiveCallbackFilterIterator (
new RecursiveDirectoryIterator (
$directory ,
RecursiveDirectoryIterator :: SKIP_DOTS
),
function ( $fileInfo , $key , $iterator ) use ( $filter ) {
return $fileInfo -> isFile () || ! in_array ( $fileInfo -> getBaseName (), $filter );
}
)
);
foreach ( $files as $name => $file ) {
if ( ! $file -> isDir ()) {
$filePath = $file -> getRealPath ();
$relativePath = substr ( $filePath , strlen ( realpath ( $directory )) + 1 );
$zip -> addFile ( $filePath , $relativePath );
2024-03-17 12:46:38 +01:00
}
}
2024-03-18 17:42:31 +01:00
$zip -> close ();
2024-03-18 19:05:37 +01:00
http_response_code ( 201 ); // Création de l'archive réussie, renvoie une réponse avec le code 201 Created
}
?>