php - 如何处理 PHP 中所有用户的全局变量相同?
问题描述
我想使用将在所有用户之间共享的全局变量使用 php 创建简单的多人游戏,而不使用套接字。
我尝试编写具有名为“connections”的全局变量和代码来处理带有名为“myName”的url参数的GET请求的php服务器。当用户向 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 服务器实际工作方式的一些信息。我希望“连接”是在整个“服务器寿命”中发送 GET 请求的连接用户的数量。
解决方案
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,
));
要执行,您可以使用准备好的语句。
// (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的更多信息。
推荐阅读
- python - Python list.insert() 多索引/列表列表
- php - 如何在 Cake PHP Form->select 中将第一个选择器值设置为 1
- python - 检查来自不同列表的值是否小于 x
- java - 使用spring webClient完成所有http请求后如何等待?
- c++ - 使用 cudaMemcpy3D 进行高效的零填充
- python - 使用 Python 从加载的 XML 文件中获取 XML 文件名
- java - 杰克逊反序列化数组内的数组
- google-colaboratory - Google Colab 用户活动
- javascript - 如何仅在 textarea 完全加载后运行控制器功能?
- uwp - FileInformationFactory GetVirtualizedItemsVector() 在 UWP 中更改文件夹名称时不更新文件路径