我正在我的索引页面上记录IP,这是大多数人将访问的页面。我想记录IP的统计数据。所有信息都进入MySQL数据库。我的问题是滞后。
为我生成页面大约需要一秒钟。我希望它尽可能快,并且服务器连接到数据库并插入日志。现在(我相信)用户进入索引页面,在整个页面加载之前,我的脚本被执行,它连接到数据库并插入数据。因此用户必须等待一秒钟才能插入数据。我希望用户访问该页面,然后将数据插入到数据库中。
这是我的代码。
的index.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);
}
的functions.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')");
}
?>
答案 0 :(得分: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”变量
答案 1 :(得分: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();
。在另一个注释中,正如其他人所提到的那样,对于一个简单的操作只需一秒,因为这太多了。你必须试着看看为什么会这么久。首先,检查是连接还是查询本身。在后一种情况下,如果日志表太大,则必须考虑: