Как мне постоянно проверять оператор if в php? - PullRequest
1 голос
/ 11 марта 2020

У меня есть оператор php if для проверки времени сервера, если в определенный час он запускает функцию jquery.

проблема в том, что он запускается только один раз при загрузке страницы. я знаю, как это сделать с помощью javascript, но мне нужно, чтобы оператор if был php, потому что мне нужно проверять время сервера, а не текущее время браузера пользователя.

что-то вроде проверки каждые 10 с c было бы идеально, я думаю

код в нижнем колонтитуле. php:

<?php
date_default_timezone_set('Europe/Rome'); // CET
$info = getdate();
$hour = $info['hours'];
if ($hour >= 8 && $hour <= 22){ ?>
    <script type="text/javascript">
    jQuery(document).ready(function(){
            document.getElementById("myid").innerHTML = "OPEN";
            document.getElementById("myid").setAttribute("class", "open");
    });
    </script>
<?php }else{ ?>
    <script type="text/javascript">
    jQuery(document).ready(function(){
            document.getElementById("myid").innerHTML = "CLOSED";
            document.getElementById("myid").setAttribute("class", "closed");
    });
    </script>
<?php } ?>

1 Ответ

1 голос
/ 11 марта 2020

Ваш код PHP выполняется один раз при загрузке страницы. Только после завершения PHP полученные HTML и Javascript отправляются в браузер, чтобы ваши посетители могли что-то увидеть.

Если вы хотите периодически что-то проверять , пока пользователь на вашем сайте , это работа для Javascript, а не PHP. Поскольку вам нужно проверять серверное время вместо местного времени пользователя, лучше всего использовать Ajax для вызова PHP скрипта так часто.

Судя по тому, что вы хотите сделать, все вам действительно нужно знать, в какой час сервер думает. Лично я предпочитаю, чтобы эти PHP сценарии выводили JSON, главным образом потому, что Javascript может с этим легко справиться, поэтому простого сценария PHP, как этот, будет достаточно:

<?php
header('Content-Type: application/json');

date_default_timezone_set('Europe/Rome');
$info = getdate();
$hour = $info['hours'];
echo json_encode(['hour' => $hour]);

Это выведет объект JSON, который содержит текущий час в соответствии с сервером, например: {"hour":21}

Вы можете использовать это относительно просто с jQuery. Заверните его в setInterval, чтобы он периодически запускался. Вы упомянули каждые 10 секунд, вот что я буду использовать в этом примере:

<script>
setInterval(function() {
    // change "/server_time.php" to point to wherever you put that PHP script above
    jQuery.getJSON("/server_time.php", function(data) {
        if (data.hour >= 8 && data.hour <= 22) {
            document.getElementById("myid").innerHTML = "OPEN";
            document.getElementById("myid").setAttribute("class", "open");
        } else {
            document.getElementById("myid").innerHTML = "CLOSED";
            document.getElementById("myid").setAttribute("class", "closed");
        }
    });
}, 10000);
</script>

Быстрый отказ от ответственности : я не тестировал этот код, поэтому YMMV. Похоже, это должно сработать, но я не собирался полностью решать вашу проблему для вас, а указать путь к go.

...