Php 我如何控制我的所有网站';什么要求?

Php 我如何控制我的所有网站';什么要求?,php,mysql,sql,algorithm,performance,Php,Mysql,Sql,Algorithm,Performance,我需要管理我的网站的请求。由于这两个原因,我需要检测可疑请求并阻止该IP,并计算访问我的网站的用户数 所以我创建了一个如下表: // requests +----+----------------+-------------+ | id | UserId_or_IP | unix_time | +----+----------------+-------------+ | 1 | 12353 | 1339412843 | | 2 | 23353

我需要管理我的网站的请求。由于这两个原因,我需要检测可疑请求并阻止该IP,并计算访问我的网站的用户数

所以我创建了一个如下表:

// requests
+----+----------------+-------------+
| id |  UserId_or_IP  |  unix_time  |
+----+----------------+-------------+
| 1  | 12353          | 1339412843  |
| 2  | 23353          | 1339412864  |
| 3  | 178.253.29.175 | 1339412894  |
| 4  | 3422           | 1339412899  |
| 5  | 342232         | 1339412906  |
| 6  | 2353           | 1339412906  |
| 7  | 7785           | 1339412951  |
| 8  | 148.23.29.109  | 1339413640  |
| 9  | 178.253.29.175 | 1339413621  |
| 10 | 5462           | 1339414490  |
| 11 | 342232         | 1339414923  |
| 12 | 178.253.29.175 | 1339419901  |
| 13 | 8007           | 1339424860  |
| 14 | 8007           | 1339424822  |
| 15 | 2353           | 1339424902  |
+----+----------------+-------------+
80.82.70.24 - - [19/Jun/2016:07:26:44 -0400] "GET http://httpheader.net/ HTTP/1.1" 401 481 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.28) Gecko/20120306 Firefox/3.6.28 (.NET CLR 3.5.30729)"
对于每个请求,我在该表中插入一个新行(打开我网站的每个页面意味着一个请求)

这是我在
index.php
中的查询:(
index.php
是一个所有页面都从中经过的页面)



我的问题是什么?该查询使我的网页加载速度变慢。因为在加载每页之前都有一个
INSERT
查询。有没有更好的方法来处理网站的请求?

考虑改用web服务器已经生成的日志。例如,在一个名为
access\u log
的文件中,web服务器Apache编写的行如下所示:

// requests
+----+----------------+-------------+
| id |  UserId_or_IP  |  unix_time  |
+----+----------------+-------------+
| 1  | 12353          | 1339412843  |
| 2  | 23353          | 1339412864  |
| 3  | 178.253.29.175 | 1339412894  |
| 4  | 3422           | 1339412899  |
| 5  | 342232         | 1339412906  |
| 6  | 2353           | 1339412906  |
| 7  | 7785           | 1339412951  |
| 8  | 148.23.29.109  | 1339413640  |
| 9  | 178.253.29.175 | 1339413621  |
| 10 | 5462           | 1339414490  |
| 11 | 342232         | 1339414923  |
| 12 | 178.253.29.175 | 1339419901  |
| 13 | 8007           | 1339424860  |
| 14 | 8007           | 1339424822  |
| 15 | 2353           | 1339424902  |
+----+----------------+-------------+
80.82.70.24 - - [19/Jun/2016:07:26:44 -0400] "GET http://httpheader.net/ HTTP/1.1" 401 481 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.28) Gecko/20120306 Firefox/3.6.28 (.NET CLR 3.5.30729)"
服务器的配置将决定此日志文件中的结构。这个来自我默认Apache安装的示例包括请求的IP、发生时间、实际请求、服务器发回的代码(在本例中,401未找到)以及发出请求的浏览器。互联网上有很多使用Perl之类的程序解析web服务器日志文件并生成统计数据的例子


您评论说您正在使用Nginx,因此您必须阅读Nginx将创建哪些日志。

使用排队系统为您执行此日志记录,这样不会阻塞“有更好的方法吗?”--是的。您的web服务器应该已经有访问日志,您可以脱机解析这些日志以测量这些统计信息。对于apache,它通常位于基于Unix的系统上的
/var/log/httpd/access\u log
中。为了阻止侵入性的访问者,我建议避免使用内容可能是两种不同内容的专栏,请先查看
fail2ban
。相反,有一个“userid”和一个“ip”列;非登录用户时,在userid中输入NULL。(但是你仍然应该使用你的web服务器的内置日志来实现你的目标)@Lotharyx我明白了。。请你在我的问题下写一个答案,完整地解释你的想法好吗;你真的在使用apache吗?不客气!谢谢你的投票;如果您尝试此方法并有疑问,请回来发表更多评论。我认为解析文件比处理数据库要困难得多。因此,我认为将每个请求存储到数据库中对我来说似乎更好。我说的对吗?答案通常是“视情况而定”。我们的询问者可能更熟悉处理数据库,所以他想使用数据库,但现在他发现他的数据库查询对他的网站性能有负面影响。我认为在这种情况下,它不是“更好”。在其他情况下,使用数据库而不是日志文件可能是“更好”的。他们每天处理数十亿的页面浏览量。