Проверка сайта с помощью PHP и Telegram
Давай подробно разберем, что нужно сделать.
Для начала, можно включить отображение ошибок, что бы проще было отслеживать все нащи действия
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Напишим функцию проверки доступности сайта
function checkSiteAvailability($url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $http_code == 200;
}
Эта функция отвечает за проверку доступности сайта с помощью cURL:
- Инициализация cURL с помощью curl_init($url) — создается запрос на указанный URL.
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); — возвращает результат выполнения вместо вывода его на экран.
- curl_setopt($ch, CURLOPT_HEADER, true); и curl_setopt($ch, CURLOPT_NOBODY, true); — отключают передачу тела ответа, оставляя только заголовки.
- curl_setopt($ch, CURLOPT_TIMEOUT, 10); — устанавливает таймаут на 10 секунд для завершения запроса.
- curl_exec($ch); — выполняет запрос.
- curl_getinfo($ch, CURLINFO_HTTP_CODE); — получает HTTP-код ответа (например, 200 для успешного запроса).
- curl_close($ch); — закрывает соединение.
- Возвращается true, если сайт доступен (код 200), иначе false.
Функция отправки уведомлений в Telegram
function sendTelegramNotification($botToken, $chatId, $message) {
$url = "https://api.telegram.org/bot$botToken/sendMessage?chat_id=$chatId&text=".urlencode($message);
file_get_contents($url);
}
Основная логика
if (!checkSiteAvailability($url)) {
$message = "Сайт $url недоступен! $http_code";
sendTelegramNotification($botToken, $chatId, $message);
echo $message;
} else {
echo "Сайт $url доступен.";
}
Таким образом, этот код проверяет доступность сайта и уведомляет вас в Telegram, если сайт не работает.
Весь код находится в github а сам видео - урок на моем канале, кликай чтобы перейти.