@M1mdex

Заморозка сервера в конец срока оплаты?

Не буду томить сразу к сути:
Я делаю свой биллинг на локалке (openserver), я понял что нужно использовать cron который каждые 5 минут будет выполнять файл, в котором будет код проверки:
<?php
    include('../database/connect.php');


    $sql2 = "SELECT * FROM `servers`";
    $res2 = mysqli_query($db, $sql2);
    $ress2 = mysqli_fetch_assoc($res2);



    while($ress2) {
        if($ress2['pay_date'] == date('Y-m-d')) {
            $curl = curl_init();

            curl_setopt_array($curl, array(
            CURLOPT_URL => "https://panel.REDACTED.space/api/application/servers/" . $ress2['id'] . "/suspend",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_HTTPHEADER => array(
                "Accept: application/json",
                "Content-Type: application/json",
                "Authorization: Bearer REDACTED"
            )
            ));

            $response = curl_exec($curl);
            $err = curl_error($curl);

            curl_close($curl);
        }
    }


Но когда захожу в файл, загрузка одну минуту и:
Fatal error: Maximum execution time of 60 seconds exceeded in C:\OSPanel\domains\REDACTED\cron\check.php on line 12

(Пишу для птеры)
  • Вопрос задан
  • 116 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Дык у вас бесконечный цикл.
1. Получать из базы надо только нужные данные, а не все разом.
2. mysqli_fetch_assoc надо вызывать для получения каждой следующей строки из базы.
--$sql2 = "SELECT * FROM `servers`";
++$sql2 = "SELECT 'id' FROM `servers` WHERE `pay_date` = CURDATE()";
--$ress2 = mysqli_fetch_assoc($res2);
--while($ress2) {
++while ($ress2 = mysqli_fetch_assoc($res2)) {

Я бы ещё добавил условие, что сервер не заморожен.
И вызывать такой скрипт достаточно раз в сутки, так как он завязан только на текущую дату.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
У PHP сервера есть настройка в конфиге php.ini - макс. время выполнения скрипта - max_execution_time.
Для долгоиграющих скриптов, обычно, разработчики либо в конфиге (повлияет на все скрипты), либо в htaccess (повлияет на скрипты в пределах каталога), либо в самом скрипте через функцию set_time_limit() корректируют этот параметр, чтобы таким скриптам хватило время на выполнение. Выкручивать этот параметр не нужно для всего сервера, иначе если в частонагруженных скриптах будут проблемы по зацикливанию, то их зависание скушает всю оперативную память сервера при многократном запуске.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы