小编php*_*_qq的帖子

通过LAN IP地址连接websocket服务器

我已经建立了一个以学习为目的的websockets聊天.一切正常,但我无法解决这个问题.

当我127.0.0.1在客户端提供连接的地址时,我可以从托管它的计算机访问服务器,但是当我将地址更改为托管计算机的实际LAN地址时,我甚至无法连接服务器主持人本身.看到:

Server = new FancyWebSocket('ws://127.0.0.1:9300'); 似乎工作但只有托管服务器的计算机可以连接(出于显而易见的原因)

Server = new FancyWebSocket('ws://192.168.1.3:9300');没有电脑可以连接.我确认192.168.1.3是托管计算机的LAN地址.

我需要在哪里放置一个地址,以便本地网络中的其他计算机可以连接?

php lan websocket

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

MySQL外键在同一个表上

我有这个表存储评论.每条评论都有自己的ID和isReply列,以防评论是对另一条评论的回复.我想知道我是否可以设置关系,以便在删除评论时,所有回复该评论的评论都会自动删除.我尝试将外键设置为isReply引用列comments.id但我收到此错误:

#1452 - 无法添加或更新子行:外键约束失败(_db.#sql-1030_31f,CONSTRAINT #sql-1030_31f_ibfk_1 FOREIGN KEY(isReply)REFERENCES comments(id)ON DELETE CASCADE ON UPDATE NO ACTION)

mysql

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

PHP:避免除零的优雅方式

就像这个网站一样,我当前的项目有声誉,在我正在编写的脚本中,我需要计算两个用户声誉之间的比例.

$attacker->ratio = $defender->rep / $attacker->rep;
$defender->ratio = $attacker->rep / $defender->rep;
Run Code Online (Sandbox Code Playgroud)

在这样做的过程中,我偶尔可能会将除数的声誉归为0,这很糟糕!

显然我可以添加几个支票,但我想知道是否还没有发明更漂亮的解决方案,比如@盈方,但我知道这不是一个好主意.

php

8
推荐指数
3
解决办法
8651
查看次数

字面意思是将二进制数据写入文件

我有一个整数数组

Array
(
    [0] => Array
        (
            [0] => 1531412763
            [1] => 1439959339
            [2] => 76
            [3] => 122
            [4] => 200
            [5] => 4550
            [6] => 444
        )
...
Run Code Online (Sandbox Code Playgroud)

依此类推,我想如果我把它看作是一个数据库 - 最外层数组的元素是行,内部数组的元素是列.

我想将该信息保存到文件中,以便稍后我可以检索它,但我想将其保存为二进制数据以节省空间.基本上,如果我将示例中的第一个整数写入1531412763文件,它将占用10个字节,但如果我可以将其保存为有符号整数,则需要占用4个字节.

我已经看了一些其他的答案,这些答案都建议使用fwrite哪些我无法理解如何以这种方式使用?

php filesystems binaryfiles binary-data

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

MySQL INSERT重复键UPDATE与SELECT

我有一个像下面这样的查询

INSERT INTO connections (`c_id`,`in`,`out`,`ip`,`userID`) 
VALUES ( 
    ( 
        SELECT c_id 
        FROM connections 
        WHERE (a bunch of conditions) 
        ORDER BY c_id DESC LIMIT 1 

    ),
    '1373799802',
    0,
    INET_ATON('127.0.0.1'),
    4

) 
ON DUPLICATE KEY UPDATE `out` = 1
Run Code Online (Sandbox Code Playgroud)

这会引发以下错误

1093 - 您无法在FROM子句中为更新指定目标表"连接"

显然我在insert into on duplicate update语法中不能有SELECT子句,但我真的宁愿这样做,而不是运行2个查询.谁能告诉我怎么做到这一点?

mysql select on-duplicate-key

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

Javascript XHR发送multipart/form-data

我正在尝试发送multipart/form-data内容类型请求:

var xhr = new XMLHttpRequest();

xhr.onreadystatechange = function(){
    if(xhr.readyState==4){
         alert(xhr.responseText);
    }
}

xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type","multipart/form-data; boundary=---------------------------275932272513031");

xhr.send('-----------------------------275932272513031 Content-Disposition: form-data; name="name"

test

----------------------------275932272513031--');
Run Code Online (Sandbox Code Playgroud)

然后在php我只打印$_POST数组

print_r($_POST);
Run Code Online (Sandbox Code Playgroud)

但我每次都得到一个空数组.我希望看到

Array (
    name => "test"
)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

javascript multipartform-data xmlhttprequest

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

不使用GROUP_CONCAT的原因?

我刚刚发现了这个非常有用的MySQL功能GROUP_CONCAT.对我来说它看起来非常有用且过于简单,我实际上害怕使用它.主要是因为自从我开始进行网络编程以来已经有一段时间了,我从未在任何地方看过它.令人敬畏的用法示例如下

clients保存客户端(您不要说...)每个客户端一行具有唯一ID.
currencies有3列client_id,currencyamount.

现在,如果我想nameclients表和他的余额中获取用户15 ,使用"旧"数组覆盖方法,我将不得不使用以下SQL

SELECT id, name, currency, amount 
FROM clients LEFT JOIN currencies ON clients.id = client_id 
WHERE clients.id = 15
Run Code Online (Sandbox Code Playgroud)

然后在php中我将不得不循环遍历结果集并进行数组覆盖(我真的不喜欢它,特别是在大规模结果集中)

$result = array();
foreach($stmt->fetchAll() as $row){
    $result[$row['id']]['name'] = $row['name'];
    $result[$row['id']]['currencies'][$row['currency']] = $row['amount'];
}
Run Code Online (Sandbox Code Playgroud)

然而,通过新发现的功能,我可以使用它

SELECT id, name, GROUP_CONCAT(currency) as currencies GROUP_CONCAT(amount) as amounts 
FROM clients LEFT JOIN currencies ON clients.id = client_id 
WHERE clients.id = 15
GROUP BY clients.id
Run Code Online (Sandbox Code Playgroud)

然后在应用程序级别,事情是如此可怕和漂亮 …

php mysql sql

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

移动设备textarea上的"GO"按钮

当用户在我的网站上的textarea中键入文本时,我想添加一个GO按钮.在一个<input>元素上,当输入字段在一个表单中并且有一个提交按钮(至少对于我的android版本)时,此按钮会出现,但是我不能让它出现在textarea上.

我需要设置哪些属性或元素,以便在键入textarea时在移动设备的虚拟键盘上有"GO"或"SUBMIT"按钮?

还有一点视觉,我正在谈论这个蓝色的家伙

在此输入图像描述

html forms mobile submit

5
推荐指数
0
解决办法
366
查看次数

升级到PHP 7.0.8后出现"致命错误:无法声明类"

我使用的是PHP 7.0.4,一切运行顺利,我刚刚升级到PHP 7.0.8,我开始在这个地方遇到像这样的错误.

致命错误:无法声明类Plugins\Users\Plugin,因为该名称已在第8行的/var/www/html/plugins/Users/Plugin.php中使用

有没有人知道最新情况,我一直在阅读更改日志,但这是一个补丁更新它不应该破坏任何东西?

此外,如果没有找到此问题的解决方案,我该如何降级回7.0.4?(我正在使用ubuntu 16.04,我刚刚升级到点发布)

总结到目前为止的评论:

  • 我试过禁用opcache这没有解决问题
  • 我正在使用作曲家的自动加载器 - 我没有使用requireinclude在任何地方
  • 这个错误发生在很多类中,因此它显然不是代码问题(就我而言),而且在升级到7.0.8之前代码工作正常.

php ubuntu opcache

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

自定义元素未拾取 onclick

我正在定义一个自定义元素

customElements.define("my-button", class extends HTMLButtonElement {
  onclick() {
    console.log("bar");
  }
}, { extends: "button" })
Run Code Online (Sandbox Code Playgroud)

https://jsfiddle.net/tuxkjp3q/

但是当我点击它时什么也没有发生。

这是为什么?如何将事件处理程序附加到类的每个实例而不覆盖构造函数?

编辑:

当我检查 DOM 对象时,有一个 onclick 处理程序,但它不起作用。这很令人困惑

在此输入图像描述

编辑2:

进一步的发现,当从原型中省略时,定义处理程序是有效的

customElements.define("my-button", class extends HTMLButtonElement {
  constructor() {
    super();
    this.onclick = () => console.log("bar");
  }
}, { extends: "button" })
Run Code Online (Sandbox Code Playgroud)

但是当原型包含时onclick,相同的处理程序将不再起作用

customElements.define("my-button", class extends HTMLButtonElement {
  onclick() {
    console.log("bar");
  }

  constructor() {
    super();
    this.onclick = () => console.log("bar");
  }
}, { extends: "button" })
Run Code Online (Sandbox Code Playgroud)

如果我们能得到对这种现象的解释,我会非常高兴。

编辑3:

如果有人遇到同样的问题,我想出了一个解决方法。可能值得注意的是,只有在实例化类的直接原型中定义的处理程序才会被附加,这对性能有好处,但可能有缺陷的逻辑。无论如何,它可以根据您的要求进行调整。

// Only in the base class …
Run Code Online (Sandbox Code Playgroud)

html javascript ecmascript-6 native-web-component

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