1

我不太擅长代码,所以请使用外行术语回答!

我有广播网站,我在其中隐藏链接,直到一天中的特定时间(即广播时间)这是我用来执行此操作的代码:

<?php
date_default_timezone_set('Europe/London');
$currtime = date('Hi');
// Change time
$starttime = 2200;  
$endtime = 2300; 
$endtime = $endtime + 2400;
$endtest = $currtime + 2400;

?>
<?php

if( $currtime >= $starttime && $endtest <= $endtime ){
?>
<a href="*broadcastlink*">LIVE NOW</a>
<?php
}
else{
?>
Live at 22:00
<?php
}
?>

目前用户必须手动刷新页面,这有点混乱。

我知道这可以很容易地使用 javascript 每 x 秒刷新一次整个页面来完成,但我不想这样做,因为我有另一段代码显示了一个“类似 Facebook”的弹出窗口,它不会关闭 5 分钟除非他们点击喜欢,否则刷新整个页面会不断显示弹出窗口。

请有人可以编写一个脚本,以便我可以将刷新脚本链接到上面的 php 脚本,以便在链接显示容器刷新的时间,我环顾四周,到目前为止没有发现任何合适的?

在此先感谢您的帮助-非常感谢

4

2 回答 2

4

坏消息是 PHP 不能强迫浏览器做任何事情。您需要带有 ajax 的 javascript 来实现这一点。但是如果在客户端禁用了javascript怎么办。php 中有一个小技巧。

这是你可以做的。

确定直播开始的秒数

$numOfSeconds = $starttime - $currtime;

然后,一旦您知道要在几秒钟后刷新浏览器,这就是您可以使用 php 完成的方法。

header( "refresh:$numOfSeconds;urltoanywhere.php" );

这将带您到您希望在特定时间后访问的任何 URL。如果您想刷新,请定义指向同一页面的 url。你可以扩展这个逻辑来实现你想要的方式。

更新1:

以下是我测试过的工作代码。希望这对你有帮助:)

<?php
ob_start();
date_default_timezone_set('Europe/London');
$currentPage = $_SERVER['PHP_SELF'];
$currentTimestamp = strtotime(date('Y-m-d H:i:s'));
//Define your startTime here in {Year-Month-Day Hour:Minute:Second} format
$startTime = '2012-04-26 21:57:00';
//Define your endTime here in {Year-Month-Day Hour:Minute:Second} format.
$endTime = '2012-04-27 22:00:00';
$startTimestamp = strtotime($startTime);
$endTimestamp = strtotime($endTime);
$numOfSecondsToReload = $startTimestamp - $currentTimestamp;
if($currentTimestamp >= $startTimestamp && $currentTimestamp <= $endTimestamp):
?>
<a href="*broadcastlink*">LIVE NOW</a>
<?php else: ?>
<p>Live at <?php echo date('H:i', $startTimestamp); ?></p>
<?php header( "refresh:$numOfSecondsToReload;$currentPage"); ?>
<?php endif; ?>

Update2:重新加载特定的 div 内容。这是您可以使用的代码。

<div id="live">
    <?php
    ob_start();
    date_default_timezone_set('Europe/London');
    $currentPage = $_SERVER['PHP_SELF'];
    $currentTimestamp = strtotime(date('Y-m-d H:i:s'));
    $startTime = '2012-04-27 12:42:20';
    $endTime = '2012-04-28 22:00:00';
    $startTimestamp = strtotime($startTime);
    $endTimestamp = strtotime($endTime);
    $numOfSecondsToReload = $startTimestamp - $currentTimestamp;
    if($currentTimestamp >= $startTimestamp && $currentTimestamp <= $endTimestamp):
    ?>
    <a href="*broadcastlink*">LIVE NOW</a>
    <?php else: ?>
    <p>Live at <?php echo date('H:i', $startTimestamp); ?></p>
    <?php endif; ob_end_flush(); ?>
    <div id="timeremaining" hidden><?php echo $numOfSecondsToReload * 1000; ?></div>
</div>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
    var numOfMiliSecondsToReload = $('#timeremaining').html();
    var timeToReload = (numOfMiliSecondsToReload >= 0) ? numOfMiliSecondsToReload : 86400000;
    $(function() {
        $(function() { setTimeout( reloadDiv, timeToReload ); });
        function reloadDiv() { $('#live').load(location.href);}
    });
</script>

希望这可以帮助你。

于 2012-04-26T06:54:27.797 回答
0

没有人会为你工作,所以不要等别人为你写剧本。

既然您知道什么时候应该隐藏一些链接,那么您可以计算隐藏它们所需的时间。做这样的事情:

  • 用户在 11:50 发出请求,但您计划在 12:00 隐藏链接,十分钟后
  • 您的服务器计算 11:50 到 12:00 之间的秒数。看一下time()strtotime()函数。
  • 您的服务器将页面返回给用户,并返回应该隐藏链接之前的秒数。您可以将该数据作为隐藏的表单值返回
  • 然后,在 Javascript 中,您使用setTimeout()方法调用 JavaScript 函数,该函数在 X 时间(直到 12:00 的秒数)内隐藏链接。
  • 如果您将秒数写为如上所述的隐藏值,那么您可以在 JavaScript 中使用 document.getElementById('hidden_​​form_value').value 获取该值。
于 2012-04-26T06:49:30.257 回答