重定向用户,然后使用php和mysql记录他的访问

时间:2009-04-01 18:48:47

标签: php mysql redirect statistics tracking

我有一个PHP重定向页面来跟踪链接的点击次数。基本上它确实:

 - get url from $_GET
 - connect to database
 - create row for url, or update with 1 hit if it exists
 - redirect browser to url using Location: header

我想知道是否可以先将重定向发送到客户端,这样就可以继续使用它的工作,然后记录点击。只是简单地改变工作方式吗?

3 个答案:

答案 0 :(得分:4)

你可以这样做:

  1. $_GET
  2. 获取网址
  3. 发送Location:标题
  4. 致电flush()
  5. 连接数据库
  6. 为网址创建行,或者如果存在则更新为1次
  7. 这不一定会导致浏览器立即继续运行,因为您的连接仍处于打开状态,浏览器对此做了什么取决于它,但是(除非导致flush()的条件不正常它至少会将Location:标题输出到浏览器,以便它可以根据需要进行重定向。

    如果这还不够好,我建议将数据转储到每分钟或每秒的文件,然后脚本会将这些文件用于后处理到数据库中。如果 不够好,您可以使用pcntl_fork();这是在Apache SAPI下做的非常毛茸茸的事情。

答案 1 :(得分:1)

大多数数据库使您能够延迟插入查询,因此它只会在数据库空闲时进行处理。您最有可能做到这一点......只要数据不重要(如果mysqld死亡或刷新RAM,您将丢失查询)。 http://dev.mysql.com/doc/refman/5.1/en/insert-delayed.html

答案 2 :(得分:0)

没关系。在将重定向标头刷新到客户端之前,PHP将完成执行。如果您仍有疑问,请尝试将其保存在文件中并从浏览器加载:

<?php
header('location: /');
sleep(2);
?>

重定向不应该发生2秒钟。