为啥我在入侵PHP网站的MySQL数据库时,字段数才1就暴错了,啥原因啊......

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥我在入侵PHP网站的MySQL数据库时,字段数才1就暴错了,啥原因啊......相关的知识,希望对你有一定的参考价值。

该网站可能有了一定的入侵检测,例如过滤一定的特殊符号等
或是对非法查询进行处理,例如,不能在特定页面对关键表查询等
参考技术A 字段数才1就暴错了 ? 报什么错?
你是用什么方法?是不是方法用错了……
参考技术B 可能的汉字吧 参考技术C 入侵? 都会入侵了,这就不懂了??

AJAX/PHP 为啥 HTTP 轮询如此滞后?

【中文标题】AJAX/PHP 为啥 HTTP 轮询如此滞后?【英文标题】:AJAX/PHP Why is HTTP-Polling so laggy?AJAX/PHP 为什么 HTTP 轮询如此滞后? 【发布时间】:2011-06-16 01:16:41 【问题描述】:

为什么 HTTP 轮询如此滞后?

我拥有的是一个按钮,每当用户单击它时,MySQL 数据库字段就会更新,并将值显示给用户。我每 800 毫秒轮询一次,它非常滞后/故障。有时单击按钮时不会注册它。而且我实际上需要比每 800 毫秒更频繁地进行轮询。

这也是网站上一次只有 1 个用户...最终会同时有很多用户。

【问题讨论】:

【参考方案1】:

HTTP-streaming/Long-polling/Websockets 而不是轮询

当您需要实时信息时,您应该避免(经常)轮询。下面我将尝试解释为什么这是错误的。您可以将其比作汽车后座的一个孩子,每秒钟都在尖叫“我们还在那里吗”,而您却一直在回答“我们还没有”。

相反,您希望使用长轮询/HTTP 流或 websocket 之类的东西。你可以把它比作汽车后座的一个孩子,告诉你让他知道什么时候“我们在那里”,而不是每秒钟都问我们。你可以想象这比前面的例子更有效率。

说实话,我不认为 PHP 是此类应用程序的正确工具(目前)。您可以使用的一些选项是:

托管解决方案:

http://pusherapp.com:

Pusher 是一个托管 API,用于快速、 轻松安全地添加可扩展的 通过 WebSockets 实现实时功能 到网络和移动应用程序。


我们的免费沙盒计划包括多达 20 个连接和 100,000 条消息 每天。只需升级到付费计划 当你准备好了。

http://beaconpush.com/

Beaconpush 是一个推送服务 使用创建实时网络应用程序 HTML5 WebSockets 和 Comet。

招待自己:

http://socket.io:

Socket.IO 旨在制作实时应用程序 可以在每个浏览器和移动设备上使用 设备,模糊了差异 不同交通工具之间 机制

当变得非常大时,“自己托管”解决方案的成本会降低,但另一方面,使用 pusherapp 之类的东西会让你更容易开始(友好的 API),而且也不那么昂贵。例如 pusherapp 的“Bootstrap”每天可以有 100 个并发连接和 200,000 条消息,每月只需 19 美元(但是当小的 beaconpush 更便宜时 => 算一下 :))。作为旁注,此计划不包括 SSL,因此不能用于敏感数据。我想拥有一台专用机器 (VPS) 将花费您大约相同数量的钱(对于一个简单的网站),您还必须自己管理流媒体解决方案,但是当变得更大时,这可能更具吸引力。


内存而不是光盘

每当用户点击它时,MySQL 数据库字段得到更新,并且 值显示给用户

将磁盘 I/O(标准模式下的 MySQL)与内存进行比较时,速度非常慢。您应该使用内存数据库,例如 redis(也有持久快照)或 memcached(完全在内存中)来加快进程。我本人真的很喜欢 redis,因为它具有惊人的速度、简单性和持久的快照。 http://redistogo.com/ 提供 5MB 内存的免费计划,可能会满足您的需求。如果不是每月 5 美元的迷你计划可能会覆盖您,但是当变得更大时,VPS 会更便宜,并且在我看来是首选的解决方案。


最佳解决方案

最好的解决方案(特别是如果你变大了)是使用 VPS(花钱)自己托管 socket.io/redis。如果真的很小,我会使用 redistogo,否则我会自己托管。我也会开始使用像 beaconpush/pusherapp 这样的东西,因为它很简单(立即开始)。托管 socket.io(建议在你自己的机器上使用它,以便在变大时使用它)非常简单,但在我看来比 beaconpush/pusherapp 更难。

【讨论】:

【参考方案2】:

滞后/故障?听起来像一个客户端问题。按钮也是如此。我会先把你的 JavaScript 整理好。

至于轮询,0.8 听起来有点时间紧迫。我不了解大多数国家,但在第三世界,简单的网络数据包可能会延迟几秒钟。 (更不用说连接中断、数据包丢失和光速了。)您的应用准备好应对所有这些了吗?

至于另一种方法,我同意@Vern 的观点,即中断驱动 方法会好得多。在 HTTP 术语中,它转换为一个长期存在的 HTTP 请求,在服务器有一些实际数据要发送之前不会收到响应,从而最大限度地减少延迟和带宽。 (AFAIK)它是一种比 AJAX 更古老的技术,但最近才被命名。搜索“COMET”,您将同时获得客户端和服务器端库。

【讨论】:

【参考方案3】:

有很多事情可能会导致您遇到的延迟。您的服务器可能能够足够快地处理请求,但如果您的客户端和服务器之间的连接很慢,那么您会看到明显的延迟。

您应该尝试的第一件事是 ping 服务器并查看您获得的响应时间。

其次,您可能需要考虑中断驱动方法,而不是轮询。这意味着只有当您的服务器回复时,您才会发出下一个请求。这是有道理的,因此许多客户端不会向服务器发出大量请求,直到服务器无法应对。尤其如此,那么您的请求的 RTT(往返时间)相当长。

希望对您有所帮助。干杯!

【讨论】:

【参考方案4】:

一个好的起点是在 Mozilla Firefox 中使用像 Firebug 这样的工具,它可以让您观察发送到服务器的请求并查找瓶颈。

Firebug 将分解请求的每个部分,因此您可以查看您是否在与服务器通信时遇到问题,或者是否需要很长时间才能得到响应。

【讨论】:

【参考方案5】:

除了@Vern 的回答,我还要说,如果可能的话,我会让服务器提前缓存数据,然后所有客户端将从同一个缓存中提取数据,而不需要单独的 MySQL 调用来达到相同的每次更新的数据。然后,只要实际数据库数据发生变化,您只需让 PHP 更新缓存即可。

缓存是指让 php 写入服务器端的文件,然后客户端将简单地查看该文件的内容以查看最新信息。可能有更好的缓存方法,但由于我以前从未亲自做过,这是我想到的第一个解决方案。

【讨论】:

如果你真的想正确地进行缓存,你应该只使用 APC、redis 或 memcached 之类的东西在内存中进行缓存,因为磁盘 I/O(将磁盘旋转到正确的位置)与内存搜索(无移动部件)。 感谢@Alfred,我很清楚磁盘 I/O 真的很慢...但是因为我从来不需要 PHP 端缓存,所以我不知道当前任何方法的名称存在。每天学习新东西。

以上是关于为啥我在入侵PHP网站的MySQL数据库时,字段数才1就暴错了,啥原因啊......的主要内容,如果未能解决你的问题,请参考以下文章

请问知道MYSQL账号和密码可以入侵吗?

mysql中为啥用i代表分钟数

为啥我把php+mysql+apache都安装好了,可是当我在打开默认目录的时候显示的是文件下载

为啥我在 AngularJS 中的日期输入字段会抛出类型错误?

个人电脑搭建的php+mysql环境如无数据库密码或者密码简单会被入侵吗?

ubuntu下安装Apache+PHP+Mysql