Выполнить код php после ответа пользователя 200 - PullRequest
0 голосов
/ 28 марта 2019

Я строю API.В нем есть некоторый код, который не нужно выполнять для предоставления ответа пользователю.Поэтому я хотел бы дать ответ после выполнения обязательного кода, а также запустить оставшийся код в фоновом режиме.

Это сервер Linux, работающий под Apache и PHP7.2

        ignore_user_abort(true);
        set_time_limit(0);

        ob_start();

        $api_key = $request->get('api_key');
        $clientToken = ClientToken::where('token', $api_key)->where('is_blocked', 0)->get();
        if (count($clientToken) > 0) {
            $dateTime = date_create_from_format('d-m-Y H:i:s a', $request->get('date_time'));
            $missCallRequest = new MissCallRequest();
            $missCallRequest->client_token_id = $clientToken[0]->id;
            $missCallRequest->called_number = "+" . $request->get('called_number');
            $missCallRequest->caller_number = $request->get('caller_number');
            $missCallRequest->datetime = date_format($dateTime, 'Y-m-d H:i:s');
            $missCallRequest->operator = $request->get('operator');
            $missCallRequest->circle = $request->get('circle');
            $missCallRequest->request_url = urldecode($request->fullUrl());
            $missCallRequest->save();

        }

        $response = [
            "status" => 200,
            "message" => "Request Received",
        ];

        echo json_encode($response); // send the response

        // Get the size of the output.
        $size = ob_get_length();

        // Disable compression (in case content length is compressed).
        header("Content-Encoding: none");

        // Set the content length of the response.
        header("Content-Length: {$size}");

        // Close the connection.
        header("Connection: close");

        // Flush all output.
        ob_end_flush();
        ob_flush();
        flush();

        echo "hello";

Он отвечает после обязательного кода, но не выполняет остальную часть кода после ответа.

1 Ответ

0 голосов
/ 28 марта 2019

Используйте это, чтобы убедиться, что 200 отправлено немедленно

ignore_user_abort(true);
ob_start();
header("HTTP/1.1 200 OK");
header('Connection: close');
header('Content-Length: '.ob_get_length());
ob_end_flush();
ob_flush();
flush();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...