我有一个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
我想知道是否可以先将重定向发送到客户端,这样就可以继续使用它的工作,然后记录点击。只是简单地改变工作方式吗?
答案 0 :(得分:4)
你可以这样做:
$_GET
Location:
标题flush()
这不一定会导致浏览器立即继续运行,因为您的连接仍处于打开状态,浏览器对此做了什么取决于它,但是(除非导致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秒钟。