🚀 Advanced Web Server Manager
Complete File Manager & Terminal - Standalone Version
By Sid Gifari | Gifari Industries
Current path:
/
/
home
/
k0934d669o2b
✏️
Editing: site-monitor.php
<?php // site-monitor.php — place in account root (above public_html), NOT web-accessible $secret = 'CHANGE-THIS-LONG-RANDOM-STRING'; // only needed if triggered via URL cron if (php_sapi_name() !== 'cli') { if (!isset($_GET['key']) || $_GET['key'] !== $secret) { http_response_code(403); exit; } } $homeDir = __DIR__; // adjust if script lives elsewhere $stateFile = $homeDir . '/monitor_state.json'; $state = file_exists($stateFile) ? json_decode(file_get_contents($stateFile), true) : []; $report = ['errors' => [], 'updates' => []]; // ---------- 1. Scan for error_log files anywhere in the account ---------- $suspiciousPatterns = [ '/eval\s*\(/i', '/base64_decode/i', '/PHP Fatal error/i', '/failed to open stream/i', '/script attempted to load/i', '/malicious/i', '/permission denied/i', ]; $iterator = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($homeDir, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST ); foreach ($iterator as $file) { if (strtolower($file->getFilename()) !== 'error_log' && strtolower($file->getFilename()) !== 'debug.log') continue; $path = $file->getPathname(); $size = $file->getSize(); $last = $state['logs'][$path]['size'] ?? 0; if ($size > $last) { $fh = fopen($path, 'r'); fseek($fh, $last); $chunk = fread($fh, $size - $last); fclose($fh); $flagged = false; foreach ($suspiciousPatterns as $p) { if (preg_match($p, $chunk)) { $flagged = true; break; } } $report['errors'][] = [ 'file' => str_replace($homeDir, '', $path), 'bytes_new' => $size - $last, 'flagged' => $flagged, 'excerpt' => substr($chunk, 0, 3000), ]; } elseif ($size < $last) { // Log was rotated/cleared — reset baseline, don't treat as "new" } $state['logs'][$path]['size'] = $size; } // ---------- 2. Find every WordPress install & check for updates ---------- $wpConfigs = []; $dirIt = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($homeDir . '/public_html', FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST ); foreach ($dirIt as $file) { if ($file->getFilename() === 'wp-load.php') { $wpConfigs[] = $file->getPath(); } } foreach ($wpConfigs as $wpPath) { // Bootstrap WP in a subprocess-safe way (isolate each site) $cmd = escapeshellarg(PHP_BINARY) . ' -r ' . escapeshellarg(" define('WP_USE_THEMES', false); require '$wpPath/wp-load.php'; \$core = get_site_transient('update_core'); \$plugins = get_site_transient('update_plugins'); \$themes = get_site_transient('update_themes'); \$out = []; if (!empty(\$core->updates[0]->response) && \$core->updates[0]->response === 'upgrade') { \$out[] = 'Core update available: ' . \$core->updates[0]->current; } if (!empty(\$plugins->response)) { foreach (\$plugins->response as \$slug => \$info) \$out[] = 'Plugin update: ' . \$slug; } if (!empty(\$themes->response)) { foreach (\$themes->response as \$slug => \$info) \$out[] = 'Theme update: ' . \$slug; } echo implode('|', \$out); "); $output = shell_exec($cmd); if (!empty($output)) { $report['updates'][] = [ 'site' => str_replace($homeDir . '/public_html', '', $wpPath) ?: '/', 'items' => explode('|', trim($output)), ]; } } file_put_contents($stateFile, json_encode($state)); // ---------- 3. Email combined report if anything found ---------- if (!empty($report['errors']) || !empty($report['updates'])) { $body = "Site Monitor Report — " . date('Y-m-d H:i:s') . "\n\n"; if (!empty($report['updates'])) { $body .= "=== UPDATES NEEDED ===\n"; foreach ($report['updates'] as $u) { $body .= "Site: {$u['site']}\n - " . implode("\n - ", $u['items']) . "\n\n"; } } if (!empty($report['errors'])) { $body .= "=== ERROR LOG ACTIVITY ===\n"; foreach ($report['errors'] as $e) { $flag = $e['flagged'] ? ' *** POSSIBLE MALICIOUS ACTIVITY ***' : ''; $body .= "{$e['file']} (+{$e['bytes_new']} bytes){$flag}\n{$e['excerpt']}\n\n"; } } send_report_email($body, !empty(array_filter($report['errors'], fn($e) => $e['flagged']))); } function send_report_email($body, $urgent) { require __DIR__ . '/PHPMailer/src/PHPMailer.php'; require __DIR__ . '/PHPMailer/src/SMTP.php'; require __DIR__ . '/PHPMailer/src/Exception.php'; $mail = new PHPMailer\PHPMailer\PHPMailer(true); $mail->isSMTP(); $mail->Host = 'smtpout.secureserver.net'; // or your SMTP provider $mail->SMTPAuth = true; $mail->Username = 'info@asmitasolutions.com'; $mail->Password = 'g0Rle*T$nM1'; $mail->SMTPSecure = 'ssl'; $mail->Port = 465; $mail->setFrom('info@asmitasolutions.com', 'Hosting Monitor'); $mail->addAddress('smitarane@hotmail.com'); $mail->Subject = ($urgent ? '[URGENT] ' : '') . 'Hosting Report: Updates/Errors Detected'; $mail->Body = $body; $mail->send(); }
💾 Save Changes
❌ Cancel