저는 현재 서비스 중단을 모니터링하는 PHP 내 스크립트 작업을 하고 있습니다. PhP를 사용하는 것은 이번이 처음이며 100% 익숙하지 않습니다. 답변이 뻔한 경우 죄송합니다.
Uptime Kuma를 사용하여 모니터링하고 있습니다. 서비스가 오프라인이 되면 내 서버 주소로 웹 후크를 보냅니다.http://192.168.1.100/controller/botmonitor.php
.
나는 주변을 둘러보았지만 MySQL 데이터베이스에 데이터를 삽입하는 방법을 찾을 수 없었습니다. 공평하게, 나는 다음을 얻었다:
if ($_SERVER['REQUEST_METHOD']=== 'POST') {
$data= file_get_contents('php://input');
$event= json_decode($data, true);
file_put_contents("log.txt", $event["monitor"]["name"], true);
$global $conn;
$error= "error";
$errTitle= $event["monitor"]["name"];
$errMsg= "test";
$stmt= $conn->prepare("INSERT INTO serviceerror (errorType, errorTitle, errorMsg) VALUES (?, ?, ?)");
/* Bind Parameters */
$stmt->bind_param("sss", $errTitle, $error, $errMsg);
/* Exceute SQL Query */
$stmt->execute();
/* Close Statement */
$stmt->close();
}
file_put_contents("log.txt", $event["모니터"]["이름"], true);
섹션이 완벽하게 작동합니다. 문제 없이 서비스 이름을 삽입합니다.
웹 후크의 Json 배열은 다음과 같습니다.
Array
(
[heartbeat]=> Array
(
[monitorID]=> 10
[status]=> 1
[time]=> 2022-01-25 23:40:17
[msg]=> 200 -OK
[ping]=> 23
[important]=> 1
[duration]=> 20
)
[monitor]=> Array
(
[id]=> 10
[name]=> Service
[url]=> https://website.com
[method]=> GET
[body]=> [headers]=> [basic_auth_user]=> [basic_auth_pass]=> [hostname]=> [port]=> [maxretries]=> 0
[weight]=> 2000
[active]=> 1
[type]=> http
[interval]=> 20
[retryInterval]=> 20
[keyword]=> [ignoreTls]=> [upsideDown]=> [maxredirects]=> 10
[accepted_statuscodes]=> Array
(
[0]=> 200-299
)
[dns_resolve_type]=> A
[dns_resolve_server]=> 1.1.1.1
[dns_last_result]=> [pushToken]=> [notificationIDList]=> Array
(
[1]=> 1
[3]=> 1
[4]=> 1
)
[tags]=> Array
(
[0]=> Array
(
[id]=> 10
[monitor_id]=> 10
[tag_id]=> 1
[value]=> [name]=> Local Server
[color]=> #D97706
)
)
)
[msg]=> [Service] [✅ Up] 200 -OK
)
localhost/includes/db_connection.php에 있는 내 데이터베이스 연결 파일에는 다음이 포함됩니다.
$config= include("config.php");
if (session_status()=== PHP_SESSION_NONE) {
session_start();
}
/* Sets DB veriables based on the config.php file */
$host= $config->DBHost;
$user= $config->DBUser;
$pass= $config->DBPass;
$db_name= $config->DBName;
/* Tries to make conenction to the DB */
$conn= @new MySQLi($host, $user, $pass, $db_name);
/* Checks for errors during the connecting of the DB and sets a session variable */
if ($conn->connect_error) {
$error= $conn->connect_error;
$_SESSION['dbError'];
} else{
/* unsets the session variable if connection is made to stop any possible problems */
unset($_SESSION['dbError']);
}
데이터베이스는 다른 쿼리에 대해 잘 작동하지만 이 웹 소켓이 전송될 때 데이터베이스가 작동하지 않을 뿐입니다. if 문 외부에 삽입물을 넣으면 전혀 문제가 되지 않기 때문에 데이터베이스도 호출됩니다.
도움을 주시면 정말 감사하겠습니다.
- 답변 # 1
몇 시간을 보낸 후 여기에 물어보고 싶다고 생각했습니다... 짜증나게도, 얼마 지나지 않아 알아냈습니다..
업데이트된 "botmonitor.php" 스크립트는 다음과 같습니다.