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

问题描述 投票:0回答:1

我有一个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 if-statement while-loop background repeat
1个回答
0
投票

您的PHP代码在页面加载后执行一次。仅当PHP完成时,结果HTML和Javascript才会发送到浏览器,以便您的访问者可以看到一些内容。

如果您要定期检查某些内容,[[当用户在您的网站上],这是Java语言而不是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。看起来应该可以,但是我无意为您完全解决您的问题,而是指出解决方法。

© www.soinside.com 2019 - 2024. All rights reserved.