如何处理 PHP 中所有用户的全局变量相同?

How to handle global variables to be tha same for all users in PHP?

我想用 php 创建简单的多人游戏,使用将在所有用户之间共享的全局变量,而不使用套接字。

我尝试编写 php 服务器,该服务器具有名为 "connections" 的全局变量和使用调用 "myName" 的 url 参数处理 GET 请求的代码。 当用户向 php 服务器发送 GET 请求时,"connections" 递增并作为 GET 响应发送回用户。

<?php
    $connections = 0;
    if(isset($_GET['myName'])) {
        $connections = $connections+ 1;
        echo json_encode($connections);
        exit();
    }
?>
<html>
    <head>
    </head>
        <body>
        <form action="Test/testServer.php">
            <input type="text" name="myName">
            <input type="submit" value="submit">
        </form>
    </body>
</html>

我是 php 的新手,也许我遗漏了一些关于 php 服务器实际工作方式的信息。我预计 "connections" 是发送 GET 请求的已连接用户的数量 "server life"。

PHP 是一种服务器端语言,程序一旦执行,所有的状态都被遗忘了。因此,在下一次请求中,除非存储在缓存中,否则将不存在。

但是,您可以使用数据库之类的东西来存储数据。您可以像这样连接到您的数据库:

new PDO('mysql:host=localhost;dbname=yourDb;charset=utf8mb4', 'username', 'password', array(
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
));

要执行,可以使用 Prepared statements。

// (new PDO) is your pre-instanced PDO
$stmt = (new PDO)->Prepare('SELECT id FROM test WHERE email = ? LIMIT 1');
$stmt->execute(array('foo@bar.com'));
$stmt->fetch(); // Array ( 'id' => (int) 1 )

在您的情况下,您需要设置一个数据库来注册连接。当新玩家加入时,对于一个完全基本的(没有安全性)示例,您可以存储他的 ID。

session_start();
// new PDO is your pre-instanced PDO
$con = new PDO;
$con->Prepare('INSERT INTO players (username) VALUES (?)')->execute(array('foo'));
$_SESSION['player.id.insecure'] = $con->lastInsertId();

然后,您要实现的目标全都取决于您的基础架构。您可以在此处阅读有关 PDO 的更多信息。