<?php
/**
* Archives directory content for dry-run scenarios based on a configuration file.
*
* @param array $config Configuration array.
* - 'source_directories' => Array of directories to archive.
* - 'archive_dir' => Directory to store the archives.
* - 'dry_run' => Whether to perform a dry run (true) or actually archive (false).
*/
function archiveDirectories(array $config): void
{
// Validate configuration
if (!isset($config['source_directories']) || !is_array($config['source_directories']) || empty($config['source_directories'])) {
error_log("Invalid 'source_directories' configuration.");
return;
}
if (!isset($config['archive_dir']) || !is_dir($config['archive_dir'])) {
error_log("Invalid 'archive_dir' configuration.");
return;
}
if (!isset($config['dry_run']) || !is_bool($config['dry_run'])) {
error_log("Invalid 'dry_run' configuration.");
return;
}
$sourceDirectories = $config['source_directories'];
$archiveDir = $config['archive_dir'];
$dryRun = $config['dry_run'];
// Ensure archive directory exists
if (!is_dir($archiveDir)) {
try {
mkdir($archiveDir, 0777, true); // Create directory recursively
} catch (Exception $e) {
error_log("Failed to create archive directory: " . $e->getMessage());
return;
}
}
foreach ($sourceDirectories as $sourceDir) {
if (!is_dir($sourceDir)) {
error_log("Source directory does not exist: " . $sourceDir);
continue;
}
$archiveName = basename($sourceDir);
$archivePath = $archiveDir . '/' . $archiveName . '.tar.gz';
if ($dryRun) {
echo "Dry Run: Archiving $sourceDir to $archivePath\n";
} else {
// Use tar command to create the archive
$command = "tar -czvf " . escapeshellarg($archivePath) . " -C " . escapeshellarg($sourceDir) . " .";
exec($command, $output, $returnCode);
if ($returnCode !== 0) {
error_log("Failed to archive $sourceDir. Return code: " . $returnCode . ". Output: " . implode("\n", $output));
} else {
echo "Archived $sourceDir to $archivePath\n";
}
}
}
}
// Example Usage (read config from a file, for example)
// $config = parse_ini_file('config.ini');
// archiveDirectories($config);
?>
Add your comment