>source

저는 현재 서비스 중단을 모니터링하는 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" 스크립트는 다음과 같습니다.

    $data= file_get_contents('php://input');
    $event= json_decode($data, true);
    file_put_contents("log.txt", $event["monitor"]["name"], true);
    $errorType= "error";
    $errorTitle= $event["monitor"]["name"];
    $errorMsg= "Test";
    $stmt= $conn->prepare("INSERT INTO serviceerror (errorType, errorTitle, errorMsg) VALUES (?, ?, ?)");
    $stmt->bind_param("sss", $errorType, $errorTitle, $errorMsg);
    $stmt->execute();
    $stmt->close();
    

  • 이전 windows : 넷하드의 대용량 파일 비교
  • 다음 javascript : Three.js에서 두 벡터 사이의 y 각도를 얻는 방법은 무엇입니까?