0

我在我的索引页面上记录 IP,这是大多数人会访问的页面。我想记录 IP 以进行统计。所有信息都进入 MySQL 数据库。我的问题是滞后。

为我生成页面大约需要一秒钟。我希望它尽可能快,并且服务器连接到数据库并插入日志。现在(我相信)用户进入索引页面,在整个页面加载之前执行我的脚本,该脚本连接到数据库并插入数据。所以用户必须等待一秒钟才能插入数据。我希望用户访问该页面,然后将数据插入数据库。

这是我的代码。

索引.php

$ip = $_SERVER['REMOTE_ADDR'];
if(substr($ip,0,4) != "192."){ //Don't log my local IP
    $page = $_SERVER['PHP_SELF']; 
    include("ext/functions.php"); 
    logger($page,$ip);
}

函数.php

<?php 
function logger($page, $ip){ 
    $logr = mysqli_query(mysqli_connect($host, $user, $pass,$statDB),
    "INSERT INTO logs (page, DATE, ip) VALUES ('$page', NOW(), '$ip')"); 
}
?>
4

2 回答 2

0

您可以刷新输出缓冲区,以便用户可以看到实际页面,然后执行插入。您是否真的能够做到这一点取决于您的实际实现,但如果它很简单,您可以将代码放在脚本的最后,并且在它执行之前:

ob_flush();
flush();
session_write_close();  //optional; it will allow your users to navigate away before the slow operation is complete (if you are using sessions)
//your logging code goes here
  • 您可能需要ob_start();在脚本的开头调用。
  • 这只会让你的页面显示得更快,它不会让它加载得更快(加载图标仍然会显示)

在另一个注释中,正如其他人所提到的,一个简单的操作需要一秒钟,因为这太多了。你必须试着看看为什么它会这么长。首先,检查是连接还是查询本身的问题。在后一种情况下,如果日志表太大,则必须考虑:

  • 删除表上的任何(或所有)索引。索引有利于读取,但会减慢写入速度,因此如果您将此表主要用于写入,则应重新考虑其结构。
  • 重新考虑您正在使用的表引擎。不同的表类型有不同的性能特点;例如,检查存档
于 2013-04-14T11:50:58.627 回答
0

您可以在页面完全加载后使用 jquery 来执行此操作:

创建一个 php 页面并将您的 php/mysql 代码存储到其中,如“storeip.php”

然后只需下载 jquery 库并将其插入到您的索引页面中,例如:

<script src="scripts/jquery.min.js" type="text/javascript"></script>

并使用以下代码:

<script type="text/javascript">
$(document).ready(function(){
var ip = "<? echo $_SERVER['REMOTE_ADDR']; ?>";
var page = "<? echo $_SERVER['PHP_SELF']; ?>";

$.post("storeip.php","ip="+ip+"&page="+page);
});
</script>

这样您就可以在“storeip.php”文件中管理发布的“ip”和“page”变量

于 2013-04-14T08:25:58.390 回答