我如何不断检查 php 中的 if 语句?

How do i constantly check a if statement in php?

我有一个 php if 语句来检查服务器时间,如果是某个时间,它会运行一个 jquery 函数。

问题是它只在页面加载时触发一次。我知道如何使用 javascript,但我需要 if 语句 php 因为我需要检查服务器时间,而不是用户浏览器的当前时间。

我想每 10 秒检查一次就比较理想了

footer.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 } ?>

您的 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>

Quick disclaimer: I didn't test this code, so YMMV. It looks like it should work, but I didn't intend to fully solve your problem for you, rather to point out the way to go about it.