首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本地主机而非现场的时间计算

本地主机而非现场的时间计算
EN

Stack Overflow用户
提问于 2016-10-21 13:35:07
回答 2查看 201关注 0票数 0

我有下面的代码块,它在本地主机上很好地工作,但在活动站点上不工作。我更新了xampp,以便在服务器上运行PHP 7,以防出现问题。

代码语言:javascript
复制
<?php

try {
    $minutes = 10;
    $status = date('Y-m-d H:i:s', time() - $minutes * 60);
    $getOnlineUsers = $db->query("SELECT user_online.*, members.username,
                                    (SELECT COUNT(id) FROM user_online WHERE last_active > '$status' AND memberID = '0') AS guest
                                    FROM user_online
                                    LEFT JOIN members ON members.memberID = user_online.memberID
                                    WHERE last_active > '$status' ");
    $total = ($getOnlineUsers->rowCount());

    if ($total > 0) {
        while ($row = $getOnlineUsers->fetch()) {
            echo '<ul>';
            if ($row['memberID'] == '0') {
                echo '<li>guest' . $row['id'] . '</li>';
            } else {
                if ($row['memberID'] == '1') {
                    echo '<li>' . $row['memberID'] . ' ' . $row['username'] . ' <a>ADMIN</a></li>';
                } else {
                    echo '<li>' . $row['memberID'] . ' ' . $row['username'] . '</li>';
                }
            }
            echo '<li>online: ' . $row['last_active'] . '</li>';
            echo '</ul>';
            echo '<br />';
        }
    } else {
        echo 'nobody online';
    }
} catch (PDOException $e) {
    echo $e->getMessage();
}

echo '<br />';
echo $total; // added just to see number rows returned
?>

我想做的是列出“在线/访问我的网站”的所有成员和客人。last_active值作为时间戳存储,并在用户查看新页面时更新,其想法是,任何未在“实时”的10分钟内更新其last_active的用户都不会显示在结果中。

就目前情况而言,我没有收到任何错误,但是如果我乱搞代码,那么就会创建错误,所以报告也很好。

我在脚本的底部添加了$total;,以显示返回了多少行,这里我看到了一个问题,因为它正在返回'0‘--只有在实时站点tho上,localhost是可以的。

如果我将$minutes=10更改为$minutes=90,那么在直播站点上它就能工作了!然而,如果我到'90‘以下,它就不会。

我只是完全困惑的问题是什么,因为它的工作在本地主机,但没有在现场。我已经检查过所有的数据库字段都是相同的,值正在被更新。一切看起来都很好。

有什么明显的事情我在这里看不到,或有什么建议,这可能会发生吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-21 13:45:08

我注意到您正在计算PHP中的时间戳,然后将其与MySQL值进行比较。这确实冒着PHP和MySQL服务器不在同一时间的风险。

localhost上,不存在混淆的可能性,但您的活动服务器有可能在MySQL服务器上运行,比方说,在MySQL服务器上运行。(可悲的是,我从experience T_T上说到)如果MySQL服务器是一台不同的物理机器,那么问题会变得更糟,因为它们可能相隔几秒钟甚至几分钟(或者,同样地,与经验不同步46分钟.)

最安全的方法是不要像这样交叉计算日期。相反,考虑使用:

代码语言:javascript
复制
WHERE last_active > DATE_SUB(NOW(), INTERVAL $minutes MINUTE)

但是,除此之外,您还应该确保PHP和MySQL在时间上是一致的:

代码语言:javascript
复制
SELECT NOW();
echo date("Y-m-d H:i:s");
票数 0
EN

Stack Overflow用户

发布于 2016-10-21 13:45:19

让我知道last_active字段插入更新通过php函数还是mysql查询?

这两个时间是不同的。

在这里,您将在查询中传递PHP日期和时间。因此,如果您使用mysql保存last_active数据,那么它将在基于php时间的选择中产生问题。

因此,如果您使用mysql ()函数保存last_active,那么在select中使用mysql的日期函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40178083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档