nano-pro/cleanup.php
DJP 7d1cd03a32 Add multi-user support with 24-hour image expiration
Implemented complete session management system for multiple users:

**New Features:**
- Isolated user sessions with unique session IDs
- File-based image storage (not in PHP session)
- Automatic 24-hour image expiration
- Session directories: uploads/sessions/{session_id}/
- Images stored with metadata (creation time, expiry, MIME type)

**New Files:**
- session_manager.php - Complete session management class
- cleanup.php - Cron script to delete expired images
- uploads/.htaccess - Security: prevent direct file access

**Updated Files:**
- api.php - Uses SessionManager for file-based storage
- index.php - Loads images from disk via SessionManager
- .gitignore - Exclude user uploads from repository

**Usage:**
- Each user gets isolated session automatically
- Images auto-delete after 24 hours
- Run cleanup.php via cron: `0 * * * * php cleanup.php`

**Security:**
- Session IDs regenerated on first access
- Upload directory protected by .htaccess
- User images isolated by session

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 (1M context) <noreply@anthropic.com>
2025-12-16 08:56:26 -05:00

64 lines
1.7 KiB
PHP

<?php
/**
* Cleanup Script for Expired Images
* Run this via cron every hour to delete images older than 24 hours
*
* Cron example (runs every hour):
* 0 * * * * /usr/bin/php /path/to/cleanup.php >> /path/to/cleanup.log 2>&1
*/
require_once 'session_manager.php';
// Check if running from command line or web
$isCLI = php_sapi_name() === 'cli';
if (!$isCLI) {
// If accessed via web, require authentication or disable
// For now, we'll allow it but you should add authentication in production
header('Content-Type: application/json');
}
try {
$result = SessionManager::cleanupExpiredImages();
$output = [
'success' => true,
'message' => "Cleanup completed successfully",
'cleaned_images' => $result['cleaned'],
'errors' => $result['errors'],
'timestamp' => $result['timestamp']
];
if ($isCLI) {
echo "=== Image Cleanup Report ===\n";
echo "Timestamp: {$result['timestamp']}\n";
echo "Images cleaned: {$result['cleaned']}\n";
if (!empty($result['errors'])) {
echo "Errors encountered: " . count($result['errors']) . "\n";
foreach ($result['errors'] as $error) {
echo " - $error\n";
}
}
echo "===========================\n\n";
} else {
echo json_encode($output, JSON_PRETTY_PRINT);
}
exit(0);
} catch (Exception $e) {
$output = [
'success' => false,
'error' => $e->getMessage(),
'timestamp' => date('Y-m-d H:i:s')
];
if ($isCLI) {
echo "ERROR: {$e->getMessage()}\n";
exit(1);
} else {
http_response_code(500);
echo json_encode($output, JSON_PRETTY_PRINT);
exit(1);
}
}