Задать вопрос
@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

(Пишу для птеры)
  • Вопрос задан
  • 121 просмотр
Подписаться 1 Простой 4 комментария
Решения вопроса 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() корректируют этот параметр, чтобы таким скриптам хватило время на выполнение. Выкручивать этот параметр не нужно для всего сервера, иначе если в частонагруженных скриптах будут проблемы по зацикливанию, то их зависание скушает всю оперативную память сервера при многократном запуске.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы