Значение переменных в php коде не сохраняется. Почему?

Рейтинг: 0Ответов: 1Опубликовано: 21.04.2023

Не изучал php, а сейчас очень нужен в небольших количествах. С горе пополам и при помощи ChatGPT написал скрипт на php.

 
$last_date;
$last_result;
$today;
$hour;
$result;
if (!isset($_POST['TechBr'])) exit;
   
 
if ($_POST['TechBr'] == "bool"){   
    echo 'false'; 

}elseif ($_POST['TechBr'] == "reason"){
    echo 'Просто так';
}elseif ($_POST['TechBr'] == "priceoil"){
    $today = date('H:i');
    $hour = date('H');
    if($hour > 10){
        if($last_date == $today){
            $last_result = file_get_contents('last_par.txt');
            echo $last_result;
        }else{
            $result = rand(20, 51);
            $last_date = $today;
            $last_result = $result;
            file_put_contents('last_par.txt', $last_result);
            echo $result;
        } 
    }    
}elseif ($_POST['TechBr'] == "pricegas"){
    $rand2 = rand(100, 181);
    echo $rand2;
}elseif ($_POST['TechBr'] == "pricecoal"){
    $rand3 = rand(1, 5);
    echo $rand3;
}elseif ($_POST['TechBr'] == "time"){
    date_default_timezone_set('Europe/Moscow');
    echo date('H:i');
}    
 
?>

Проблема в том, что при get-запросе "TechBr" с параметром "priceoil", должно выдаваться значение, которые генерируется 1 раз в сутки после 10 часов по utc, а в другое время должен выдаваться прошлый результат. Но почему-то при каждом таком запросе генерируется новое значение. Почему? Что я сделал не так? Я конечно совершенно новенький в php, но по логике вроде все должно работать. Подскажите, пожалуйста, где ошибка? P.S. Сделал сохранение значение в .txt файл и последующее его извлечение, не помогло. Тоже самое, при каждом get-запросе генерируется новое значение и, что странно, в .txt файл также записывается всегда новое значение. Также, если я скопирую код и вставлю его в php-онлайн компилятор(заменяя условие get-запроса на цикл for) все работает! Почему так?

Ответы

▲ -1Принят

Попробуйте такой код(Помогала ChatGPT, но конечно я поправлял):

$last_date_file = 'last_date.txt';
$last_result_file = 'last_par.txt';

$last_date = file_exists($last_date_file) ? file_get_contents($last_date_file) : null;
$last_result = file_exists($last_result_file) ? file_get_contents($last_result_file) : null;

$today = date('Y-m-d');
$hour = date('H');
$result = null;

if (!isset($_POST['TechBr'])) {
    exit;
}

if ($_POST['TechBr'] == "bool") {
    echo 'false'; 
} elseif ($_POST['TechBr'] == "reason") {
    echo 'Просто так';
} elseif ($_POST['TechBr'] == "priceoil") {
    if ($hour >= 9) {
        if ($last_date == $today) {
            echo $last_result;
        } else {
            $result = rand(20, 51);
            $last_date = $today;
            $last_result = $result;
            file_put_contents($last_date_file, $last_date);
            file_put_contents($last_result_file, $last_result);
            echo $result;
        }
    } else {
        if ($last_date != null) {
            echo $last_result;
        } else {
            echo 'N/A';
        }
    }
} elseif ($_POST['TechBr'] == "pricegas") {
    $rand2 = rand(100, 181);
    echo $rand2;
} elseif ($_POST['TechBr'] == "pricecoal") {
    $rand3 = rand(1, 5);
    echo $rand3;
} elseif ($_POST['TechBr'] == "time") {
    date_default_timezone_set('Europe/Moscow');
    echo date('H:i');
}    
?>```