highlighted code

User Avatar
👤 admin
🔴 Admin
✍️ It's not important where you are, it's important with who you are and how you live with them.
⏳ Last active: 15 Apr 2025 at 16:00
📅 Created: 06 Mar 2025 at 04:05
👀 Viewed: 79 times
✉️ Send Email
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'phpmailer/src/Exception.php';
require 'phpmailer/src/PHPMailer.php';
require 'phpmailer/src/SMTP.php';

// List of IP addresses/hostnames to monitor
$addresses = [
    '192.168.1.1' => 'Local Network',
    'google.com' => 'Google',
];

// Function to check reachability (OS-aware)
function pingAddress($address) {
    $os = strtoupper(substr(PHP_OS, 0, 3));
    if ($os === 'WIN') {
        $command = "ping -n 1 " . escapeshellarg($address); // Windows command
    } else {
        // Linux/Unix command with IPv4 and timeout
        $command = "ping -4 -c 1 -W 2 " . escapeshellarg($address);
    }
    exec($command, $output, $result);

    // Analyze output
    if ($os === 'WIN') {
        foreach ($output as $line) {
            if (strpos($line, 'Destination host unreachable') !== false ||
                strpos($line, 'Request timed out') !== false) {
                return false;
            }
        }
        return $result === 0;
    } else {
        // For Linux, check exit code and packet loss
        foreach ($output as $line) {
            if (strpos($line, '100% packet loss') !== false) {
                return false;
            }
        }
        return $result === 0;
    }
}

// Email notification function
function sendEmail($subject, $body) {
    $mail = new PHPMailer(true);

    try {
        // SMTP configuration
        $mail->isSMTP();
        $mail->Host = '';        // SMTP server address
        $mail->SMTPAuth = true;
        $mail->Username = '';    // SMTP username
        $mail->Password = '';    // SMTP password
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // Encryption
        $mail->Port = 587;       // TCP port

        // Encoding settings
        $mail->CharSet = 'UTF-8';

        // Sender information
        $mail->setFrom('sonik@webleit.eu', 'Ping Monitor');

        // Recipient list
        $recipients = [
            'user@mail.com' => 'User name 1',
            'user2@mail.com' => 'User name 2',
        ];

        foreach ($recipients as $email => $name) {
            $mail->addAddress($email, $name);
        }

        // Email content
        $mail->isHTML(true);
        $mail->Subject = $subject;
        $mail->Body = $body;

        $mail->send();
        echo 'Notification email sent successfully.';
    } catch (Exception $e) {
        echo "Email delivery failed: {$mail->ErrorInfo}";
    }
}

// Read previous failures
$previousFailedAddresses = [];
if (file_exists('failed_addresses.txt')) {
    $fileContent = file_get_contents('failed_addresses.txt');
    if (!empty($fileContent)) {
        $previousFailedAddresses = json_decode($fileContent, true);
        if (!is_array($previousFailedAddresses)) {
            $previousFailedAddresses = []; // Reset if invalid JSON
        }
    }
}

// Track current failures
$currentFailedAddresses = [];

// HTML output with auto-refresh
echo "<html><head>";
echo "<meta http-equiv='refresh' content='120'>"; // Auto-refresh every 2 minutes
echo "</head><body>";
echo "<table border='1' cellpadding='5' cellspacing='0'>";

$index = 0;
foreach ($addresses as $address => $description) {
    if ($index % 5 == 0) echo "<tr>";

    $isReachable = pingAddress($address);
    $status = $isReachable ? 'Online' : 'Offline';
    $color = $isReachable ? 'green' : 'red';

    echo "<td style='background-color: $color; padding: 10px;'>";
    echo "<strong>$address</strong><br>$description<br><em>$status</em>";
    echo "</td>";

    if (!$isReachable) {
        $currentFailedAddresses[$address] = $description;
    }

    if (($index + 1) % 5 == 0) echo "</tr>";
    $index++;
}

// Detect new outages
$newFailedAddresses = array_diff_key($currentFailedAddresses, $previousFailedAddresses);
if (!empty($newFailedAddresses)) {
    $subject = "New Service Outages Detected";
    $body = "New unreachable services:";
    foreach ($newFailedAddresses as $address => $description) {
        $body .= "- <strong>$address</strong> ($description)

";
    }
    $body .= "";
    sendEmail($subject, $body);
}

// Detect recoveries
$recoveredAddresses = array_diff_key($previousFailedAddresses, $currentFailedAddresses);
if (!empty($recoveredAddresses)) {
    $subject = "Service Restorations Detected";
    $body = "Recovered services:";
    foreach ($recoveredAddresses as $address => $description) {
        $body .= "- <strong>$address</strong> ($description)

";
    }
    $body .= "";
    sendEmail($subject, $body);
}

// Save current status
file_put_contents('failed_addresses.txt', json_encode($currentFailedAddresses));

// Close HTML table
echo "</table>";
echo "</body></html>"; 
If you want to comment: Login or Register
User Avatar
👤 admin
🔴 Admin
✍️ It's not important where you are, it's important with who you are and how you live with them.
⏳ Last active: 15 Apr 2025 at 16:00
📅 Commented: 06 Mar 2025 at 04:09
✉️ Send Email
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'phpmailer/src/Exception.php';
require 'phpmailer/src/PHPMailer.php';
require 'phpmailer/src/SMTP.php';

// List of IP addresses/hostnames to monitor
$addresses = [
    '192.168.1.1' => 'Local Network',
    'google.com' => 'Google',
];

// Function to check reachability (OS-aware)
function pingAddress($address) {
    $os = strtoupper(substr(PHP_OS, 0, 3));
    if ($os === 'WIN') {
        $command = "ping -n 1 " . escapeshellarg($address); // Windows command
    } else {
        // Linux/Unix command with IPv4 and timeout
        $command = "ping -4 -c 1 -W 2 " . escapeshellarg($address);
    }
    exec($command, $output, $result);

    // Analyze output
    if ($os === 'WIN') {
        foreach ($output as $line) {
            if (strpos($line, 'Destination host unreachable') !== false ||
                strpos($line, 'Request timed out') !== false) {
                return false;
            }
        }
        return $result === 0;
    } else {
        // For Linux, check exit code and packet loss
        foreach ($output as $line) {
            if (strpos($line, '100% packet loss') !== false) {
                return false;
            }
        }
        return $result === 0;
    }
}

// Email notification function
function sendEmail($subject, $body) {
    $mail = new PHPMailer(true);

    try {
        // SMTP configuration
        $mail->isSMTP();
        $mail->Host = '';        // SMTP server address
        $mail->SMTPAuth = true;
        $mail->Username = '';    // SMTP username
        $mail->Password = '';    // SMTP password
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // Encryption
        $mail->Port = 587;       // TCP port

        // Encoding settings
        $mail->CharSet = 'UTF-8';

        // Sender information
        $mail->setFrom('sonik@webleit.eu', 'Ping Monitor');

        // Recipient list
        $recipients = [
            'user@mail.com' => 'User name 1',
            'user2@mail.com' => 'User name 2',
        ];

        foreach ($recipients as $email => $name) {
            $mail->addAddress($email, $name);
        }

        // Email content
        $mail->isHTML(true);
        $mail->Subject = $subject;
        $mail->Body = $body;

        $mail->send();
        echo 'Notification email sent successfully.';
    } catch (Exception $e) {
        echo "Email delivery failed: {$mail->ErrorInfo}";
    }
}

// Read previous failures
$previousFailedAddresses = [];
if (file_exists('failed_addresses.txt')) {
    $fileContent = file_get_contents('failed_addresses.txt');
    if (!empty($fileContent)) {
        $previousFailedAddresses = json_decode($fileContent, true);
        if (!is_array($previousFailedAddresses)) {
            $previousFailedAddresses = []; // Reset if invalid JSON
        }
    }
}

// Track current failures
$currentFailedAddresses = [];

// HTML output with auto-refresh
echo "<html><head>";
echo "<meta http-equiv='refresh' content='120'>"; // Auto-refresh every 2 minutes
echo "</head><body>";
echo "<table border='1' cellpadding='5' cellspacing='0'>";

$index = 0;
foreach ($addresses as $address => $description) {
    if ($index % 5 == 0) echo "<tr>";

    $isReachable = pingAddress($address);
    $status = $isReachable ? 'Online' : 'Offline';
    $color = $isReachable ? 'green' : 'red';

    echo "<td style='background-color: $color; padding: 10px;'>";
    echo "<strong>$address</strong><br>$description<br><em>$status</em>";
    echo "</td>";

    if (!$isReachable) {
        $currentFailedAddresses[$address] = $description;
    }

    if (($index + 1) % 5 == 0) echo "</tr>";
    $index++;
}

// Detect new outages
$newFailedAddresses = array_diff_key($currentFailedAddresses, $previousFailedAddresses);
if (!empty($newFailedAddresses)) {
    $subject = "New Service Outages Detected";
    $body = "New unreachable services:";
    foreach ($newFailedAddresses as $address => $description) {
        $body .= "- <strong>$address</strong> ($description)

";
    }
    $body .= "";
    sendEmail($subject, $body);
}

// Detect recoveries
$recoveredAddresses = array_diff_key($previousFailedAddresses, $currentFailedAddresses);
if (!empty($recoveredAddresses)) {
    $subject = "Service Restorations Detected";
    $body = "Recovered services:";
    foreach ($recoveredAddresses as $address => $description) {
        $body .= "- <strong>$address</strong> ($description)

";
    }
    $body .= "";
    sendEmail($subject, $body);
}

// Save current status
file_put_contents('failed_addresses.txt', json_encode($currentFailedAddresses));

// Close HTML table
echo "</table>";
echo "</body></html>";