PHP / AJAX Live登录日志

时间:2014-06-25 11:32:19

标签: php html ajax reload updating

基本上,当用户登录时,我需要一个单独的网页自动更新每个登录,例如:

12:30 User1已登录。
12:35 User5已登录。

等。等

我希望页面始终自动更新。 我怎样才能做到这一点?

@Edit 是的,我知道Ajax,但我的意思是一般如何做。 当用户登录时,我应该逐行写入HTML每个日志,然后使用Ajax继续重新加载吗?

1 个答案:

答案 0 :(得分:1)

当用户登录时,您使用PHP将字符串附加到文件。

现在创建一个名为 ajaxCalls.php 的PHP文件,然后你必须打开文件并回显每一行。(确保将此输出编码为json,它变得更容易使用在javascript)。 现在调用 ajaxCalls.php (使用AJAX)并从您想要显示下面字符串的页面中获取结果作为json对象。

12:30 User1 have logged in.
12:35 User5 have logged in.

<强>的login.php

<?php
    $username = "foo";
    $password = "bar";
    if(userCanLogin($username, $password))
    {
        saveToFile($username);
    }

    function saveToFile($username)
    {
        $fileHandle = fopen("userLogins.txt", "a");
        fwrite(date("H:i") . " " . $username . " has logged in.", $fileHandle);
        fclose($fileHandle);
    }
?>

index.php 您想要自动更新的页面

<html>
    <head>
        <script src="http://code.jquery.com/jquery-1.11.1.min.js" type="text/javascript"></script>
        <script>

            function getUserLogins()
            {
                $.ajax({
                    url: 'ajax.php',
                    type: 'GET',
                    dataType: json
                    success: function(result)
                    {
                        var jsonObject = JSON.parse(result);
                        for(var row in jsonObject)
                        {
                            $("#userLogins").append(row);
                        }
                    }
                });
                setTimeout(getUserLogins, 1000); 
            }
            $(function() {
                getUserLogins();
            });
        </script>
    </head>
    <body>
        <div id="userLogins"></div>
    </body>
</html>

ajax.php 此文件应该只能被称为异步

<?php
    $lines = file("userLogins.txt");
    echo json_encode($lines);
?>

上面的所有代码都是未经测试的! 如果您想要即时更新,则必须设置一个“推送”数据给您的服务,而不是“拉”。 当执行推送时,客户端就像从服务器发送的接收器。然后必须使用某种套接字,比如WebSockets来处理数据。您可以使用像http://beaconpush.com/这样的“推送”提供程序,也可以创建自己的推送服务器(建议使用NodeJS)。