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 :
http :// example . com / chemin / vers / autobackup . php ? key = your_secret_key
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é et ajoute les fichiers à l 'archive ZIP. Si la clé est invalide ou absente, le script affiche un message d' erreur et termine son exécution .
*/
// Vérification de la clé
2024-03-18 17:42:31 +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 17:42:31 +01:00
http_response_code ( 401 );
exit ();
2024-03-18 08:49:16 +01:00
}
2024-03-18 17:42:31 +01:00
// Création du ZIP
$filter = [ 'backup' , 'tmp' ];
$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 ();
http_response_code ( 201 );
}