Files
2025-10-07 10:12:17 +02:00

105 lines
3.7 KiB
PHP

<?php
require_once '../include/init.php';
require_once '../include/auth.php';
// Only admins can purge cache
if (!isAdmin()) {
http_response_code(403);
echo json_encode(['success' => false, 'message' => 'Admin access required']);
exit;
}
header('Content-Type: application/json');
$purgeType = $_POST['type'] ?? $_GET['type'] ?? 'all';
$purgeUrl = $_POST['url'] ?? $_GET['url'] ?? '';
try {
switch ($purgeType) {
case 'all':
// Purge all cache
$cacheDir = '../data/images/cache/';
if (is_dir($cacheDir)) {
$files = glob($cacheDir . '*');
foreach ($files as $file) {
if (is_file($file)) {
unlink($file);
}
}
}
// Send Varnish purge request
$varnishHost = 'varnish';
$varnishPort = 80;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://{$varnishHost}:{$varnishPort}/");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PURGE');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-Purge-Regex: .*']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_exec($ch);
curl_close($ch);
echo json_encode(['success' => true, 'message' => 'All cache purged successfully']);
break;
case 'image':
if (empty($purgeUrl)) {
throw new Exception('URL parameter required for image purge');
}
// Purge specific image from cache
$cacheKey = md5($purgeUrl);
$cacheFile = '../data/images/cache/' . $cacheKey;
if (file_exists($cacheFile)) {
unlink($cacheFile);
}
// Send Varnish purge request for specific URL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://varnish:80" . $purgeUrl);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PURGE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_exec($ch);
curl_close($ch);
echo json_encode(['success' => true, 'message' => 'Image cache purged successfully']);
break;
case 'images':
// Purge all image cache
$cacheDir = '../data/images/cache/';
if (is_dir($cacheDir)) {
$files = glob($cacheDir . '*');
foreach ($files as $file) {
if (is_file($file)) {
unlink($file);
}
}
}
// Send Varnish purge request for images
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://varnish:80/");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PURGE');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-Purge-Regex: .*\.(jpg|jpeg|png|gif|webp|svg|ico)$']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_exec($ch);
curl_close($ch);
echo json_encode(['success' => true, 'message' => 'Image cache purged successfully']);
break;
default:
throw new Exception('Invalid purge type');
}
} catch (Exception $e) {
http_response_code(500);
echo json_encode(['success' => false, 'message' => $e->getMessage()]);
}
?>