[PHP] Monitorowanie widoczności strony

Dziś stworzymy dość prosty, ale funkcjonalny skrypt monitorujący dostępność stron www. Skrypt oczywiście oparty o bibliotekę cURL. W przypadku, gdy dana strona będzie niedostępna, skrypt będzie wysyłał powiadomienie na maila.

<?php

// Tablica z adresami stron do sprawdzenia
$urls = [
    "https://www.example.com",
    "https://www.google.com",
];

$notification_recipient = ''; // E-mail dla powiadomień

// Funkcja sprawdzająca dostępność strony
function checkAvailability($url) {
    
    $ch = curl_init($url);

    // Ustawiamy odpowiednie opcje
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // Weryfikacja SSL
    
    curl_exec($ch);

    // Sprawdzamy kod odpowiedzi HTTP
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    
    curl_close($ch);

    // Zwróć TRUE, jeśli kod odpowiedzi jest między 200 a 399 (strona jest dostępna)
    return ($httpCode >= 200 && $httpCode < 400);
}

Obsługa powiadomienia mail
function send_notification($url) {
    require 'PHPMailerAutoload.php';

   
    $subject = 'Powiadomienie';
    $message = 'Strona ' . $url . ' jest niedostępna.';

    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->Host = 'localhost';
    $mail->Port = 25;
    $mail->CharSet = PHPMailer::CHARSET_UTF8;
    $mail->setFrom('powiadomienia@example.com', 'Automat');
    $mail->addAddress($notification_recipient);
    $mail->Subject = $subject;
    $mail->Body = $message;

    return $mail->send();
    
}

// Iteracja po adresach URL i sprawdzenie dostępności
foreach($urls as $url) {

    // Wysyłamy powiadomienie, gdy strona jest niedostępna
    if(!checkAvailability($url)) {
    
        send_notification($url);
        
    }
    
}

Wystarczy teraz dodać taki skrypt do zadań Cron, aby automatycznie otrzymywać powiadomienia o niedostępności serwisu www.

Komentarze

Popular

[C++] Jak obliczyć pole i obwód trapezu?

[HTML] Jak wyśrodkować tekst?

[PHP|HTML] Odświeżenie strony