如何处理 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 的更多信息。
我想用 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 的更多信息。