小编Moa*_*Plz的帖子

PHP中的事件驱动架构和钩子

我正计划开发一个具有PHP后端的游戏来与数据存储库进行通信.我在考虑这个问题,并得出结论,我们的游戏最好的设计范例将是事件驱动的.我希望有一个成就系统(类似于本网站的徽章系统),基本上我希望能够将这些"成就检查"挂钩到游戏中发生的许多不同事件中.即:

当用户执行操作时,将触发钩子Y并调用所有附加函数以检查成就要求.

在构建这样的架构时,我将允许轻松添加新的成就,因为我将要做的就是将检查功能添加到正确的钩子中,其他一切都将落实到位.

我不确定这是否是对我打算做什么的一个很好的解释,但无论如何我正在寻找以下内容:

  1. 有关如何编写事件驱动应用程序代码的良好参考资料
  2. 代码片段展示了如何在PHP中的函数中放置"钩子"
  3. 显示如何将函数附加到第2点中提到的"钩子"的代码片段

关于如何完成2)和3),我有一些想法,但我希望精通这个问题的人可以对最佳实践有所了解.

先感谢您!

php hook event-driven-design

12
推荐指数
2
解决办法
2万
查看次数

浮点数中有效位数和精度损失之间的关系是什么?

所以我一直试图围绕浮点数中有效数字的数量与精度的相对损失之间的关系进行包装,但我似乎无法理解它.我之前正在阅读一篇文章说要做以下事情:

  1. 将float设置为值2147483647.您将看到它的值实际为2147483648
  2. 从浮点数中减去64,您将看到操作正确
  3. 从浮点数中减去65,您将看到实际上现在有2147483520,这意味着它实际上减去了128.

那么为什么这个128有10位有效数字?我理解如何存储浮点数(符号为1位,指数为8位,尾数为23位)并且如果假设所有整数将自动在浮点数据结构中找到确切的住宅,则了解如何丢失精度,但我不知道了解128来自哪里.我的直觉告诉我,我走在正确的轨道上,但我希望有人能够为我清除这一点.

我最初认为可能的浮点数之间的距离是2 ^(n-1),其中n是有效数字的数量,但这并不成立.

谢谢!

floating-point floating-point-precision

5
推荐指数
1
解决办法
914
查看次数

通过Javascript获取点击事件的文字偏移量?

所以我一直在搜索,试图弄清楚如何做以下事情并且尚未找到解决方案:

我需要从click事件中获取给定HTML元素的文本偏移量.这意味着如果我有以下HTML

<p>This is a really cool paragraph</p>
Run Code Online (Sandbox Code Playgroud)

并且用户点击句子中的第一个'a',如果我们将'This'中的'T'作为索引0,则文本偏移将是8,因为第一个'a'在索引8处.

我需要这些信息,以便我可以根据用户点击的位置以编程方式创建文本选择.到目前为止,我可以跟踪点击了哪些HTML元素,因此我可以在HTML元素级粒度上创建这种活动,但我希望能有更好的控制.

谢谢!

html javascript dom

5
推荐指数
1
解决办法
1150
查看次数

在Scrapy中禁用SSL证书验证

我目前正在努力解决与Scrapy有关的问题.每当我使用Scrapy刮取证书的CN值与服务器域名匹配的HTTPS站点时,Scrapy效果很好!另一方面,每当我尝试抓取证书的CN值与服务器的域名不匹配的网站时,我会得到以下内容:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/twisted/protocols/tls.py", line 415, in dataReceived
    self._write(bytes)
  File "/usr/local/lib/python2.7/dist-packages/twisted/protocols/tls.py", line 554, in _write
    sent = self._tlsConnection.send(toSend)
  File "/usr/local/lib/python2.7/dist-packages/OpenSSL/SSL.py", line 1270, in send
    result = _lib.SSL_write(self._ssl, buf, len(buf))
  File "/usr/local/lib/python2.7/dist-packages/OpenSSL/SSL.py", line 926, in wrapper
    callback(Connection._reverse_mapping[ssl], where, return_code)
--- <exception caught here> ---
  File "/usr/local/lib/python2.7/dist-packages/twisted/internet/_sslverify.py", line 1055, in infoCallback
    return wrapped(connection, where, ret)
  File "/usr/local/lib/python2.7/dist-packages/twisted/internet/_sslverify.py", line 1154, in _identityVerifyingInfoCallback
    verifyHostname(connection, self._hostnameASCII)
  File "/usr/local/lib/python2.7/dist-packages/service_identity/pyopenssl.py", line 30, in verify_hostname
    obligatory_ids=[DNS_ID(hostname)],
  File "/usr/local/lib/python2.7/dist-packages/service_identity/_common.py", line 235, in __init__
    raise ValueError("Invalid …
Run Code Online (Sandbox Code Playgroud)

python ssl scrapy

5
推荐指数
1
解决办法
3956
查看次数

使用Javascript XmlHttpRequest和PHP保护Web服务调用

因此,在游戏中,我希望能够让客户端(Web浏览器)和服务器之间的所有功能通过AJAX调用与PHP Web服务进行交互.这是实现此类功能的一种非常简单的方法,除了它有一些主要缺点:

  1. 使用网络嗅探器的任何人都可以看到请求的格式(除非他们使用SSL)并复制它们
  2. 任何使用浏览器玩游戏的人都可以查看包含的Javascript文件,看看提交XHR的情况

因此,为了解决这些问题中的第一个问题,我将使用与服务器的HTTPS连接(这是我如何实现SSL的正确性?),对于这两个问题中的第二个,我能想到的是混淆/最小化我的Javascript码.

有没有人对我如何验证我的PHP文件正在使用的Web服务调用有任何想法?如果我在客户端使用用户名/ PW,则攻击者只需查看Javascript文件即可查找凭据.如果我尝试使用IP地址作为一种身份验证方法,那么我觉得这只会打开另外一堆蠕虫.我基本上想确保Web服务调用来自游戏客户端.

php security authentication web-services

3
推荐指数
1
解决办法
3327
查看次数

创建"私有"JSON对象?

虽然我有一个怀疑,有没有一种方法,使在Web应用程序完全碰不得的JSON对象,我在想,如果你们有办法来维护不能使用的开发工具的控制台来改变一个全局的JSON对象.我知道将其称为"私有"变量并不是最准确的描述,但是OO语言中的私有变量基本上是我想要应用于我的JSON对象的限制.

我有一个我正在开发的应用程序,它将受益于让精明的用户与我用于在Javascript文件中存储数据的对象进行交互.

任何有关如何处理此问题的建议将不胜感激.

security jquery json private

2
推荐指数
1
解决办法
1608
查看次数

通过各自的值访问 PHP MySQLI 预定义常量?

我正在编写一个函数,它接受一个 mysqli_result 并将所有返回的列添加到我的结果对象中的关联数组中。到目前为止,通过 mysqli::multi_query 返回的所有内容都是字符串格式,而关于该值应该是什么值类型的描述保存在 mysqli::fetch_fields 返回的对象数组中。我觉得到目前为止这很令人困惑所以让我把它编码出来

if ($mysqli->multi_query($inputQuery)) {
    if ($result = $mysqli->store_result()) {
        //$fields is an array of custom objects
        $fields = $result->fetch_fields();

        //$fieldType is an integer that is the value of a mysqli predefined constant
        $fieldType = $fields[0]->type;

        if ($curRow = $result->fetch_row()) {
            //No matter what the value type in the database of this item is, and no
            //matter what $fieldType corresponds to, $curVal is going to be a string
            $curVal = $curRow[0];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

根据 …

php mysqli reference constants

1
推荐指数
1
解决办法
1254
查看次数