我们在全国性报纸上刊登了一个微型网站作为交易的一部分,他们要求每个页面的以下信息以CSV或类似方式提供:
我真的不知道预期的访客数量,但可能相当高,所以问题是;什么是最好和最有效的方法呢?
该网站是静态的,但我可以使用PHP或其他任何东西。我每次提供一个页面时只是将这些细节添加到MySQL数据库中会遇到麻烦吗?
答案 0 :(得分:2)
嗯,首先,我不知道您为什么要存储所需格式的数据,而不是先存储在SQL中,然后再转换为CSV格式。
特别是如果您的网站是静态的,那么,您将需要以某种方式使用PHP来实现它 但好吧,即使你要使用PHP,使用sql而不是CSV仍然对我来说是无稽之谈。
您的网络服务器很可能已经记录了您需要的几乎所有内容,并且通过微调也可以记录会话ID。
因此,如果您的服务器恰好是Apache,那么最有效的解决方案就是自定义访问日志,http://httpd.apache.org/docs/current/mod/mod_log_config.html
它会像
LogFormat "\"%t\", \"%f\", \"%{PHPSESSID}C\"" csv
CustomLog logs/access_log csv
并设置你的cron每天通过电子邮件发送此日志
请注意,也可能使用条件记录,以限制仅记录到html页面。我从未使用过它,也没有经过测试,但根据文档,它可能是
SetEnvIf Request_URI "/$" logable
SetEnvIf Request_URI "\.html$" logable
CustomLog logs/access_log csv env=logable
答案 1 :(得分:1)
在您需要跟踪的每个页面上都包含一个常见的php文件,并在脚本中记录您自己建议的MySQL详细信息。 MySQL具有可扩展性和强大功能,能够处理它,因为它支持一些互联网最繁忙的系统。
答案 2 :(得分:1)
通过MySQL表维护这些数据会很有效,但严格来说可能没有必要,具体取决于您将获得的负载。
或者,您可以考虑使用像sqlite一样更轻量级的东西。
http://php.net/manual/en/book.sqlite.php
它既好又有效,几乎不需要设置或调整,数据库驻留在服务器上的文件中!
MongoDB可能是另一个可以更好地扩展的选项,并允许您一起避免SQL!
我想我得到的是这个,而MySQL将很好地完成这项任务,你当然可以摆脱不同的东西,更简单化。不过,我确实想要对此进行限定,并说一旦进入大量活动,sqlite可能会遇到一些问题!
答案 3 :(得分:1)
除非你的用户超过百万,否则你不必担心......
说实话,你可以通过几种方式来监控命中。这样你就有几种不同类型的证据!
使用谷歌分析,这是谷歌提供的一些JavaScript代码。这不会增加服务器上的负载。
创建自己的代码来获取数据......在检测每条信息时需要帮助吗?
答案 4 :(得分:1)
您应该使用Google Analytics。
但是,如果你真的需要知道:如果该网站已经在PHP中,那么你没有理由不能插入数据库(或添加到CSV文件中?)这些细节。为什么要跟踪会话ID?
以下是db选项的一些示例代码:
<?php
mysql_query("INSERT INTO table (`time`, `date`, `url`, `session`) VALUES (CURTIME(), CURDATE(), " . $_SERVER['REQUEST_URI'] . ", " . $_SESSION['id'] . ");
答案 5 :(得分:1)
您可以使用数据库。并发访问是他们的目的。但实际上这更像是日志文件的任务。你不是再次询问这些结果,而是只是收集它们。
通常它就像(假设您不需要转义值)一样简单:
$csv = "$time,$date,$url,$session_id" . "\n";
file_put_contents("hit.log", $csv, FILE_APPEND);
File_put_contents是原子的,这是您希望日志文件不丢失条目的原因。但对于许多并发访问而言,它并不是最佳的;进程可能会互相阻塞。因此你需要另一个作弊:
$csv = ...
$id = rand(1,10);
file_put_contents("hit{$id}.csv", $csv, FILE_APPEND);
这会将日志分布在多个文件中; rand()就足够了。虽然您现在需要再次合并多个文件,但至少已经以正确的格式使用它。
答案 6 :(得分:1)
您需要做的就是在页面底部插入一个小小的JS代码段:
Stackoverflow源代码的示例:
<script type="text/javascript">
var _gaq=_gaq||[];_gaq.push(['_setAccount','UA-5620270-1']);
_gaq.push(['_trackPageview']);
(function(){
var ga=document.createElement('script');
ga.type='text/javascript';
ga.async=true;
ga.src='http://www.google-analytics.com/ga.js';
var s=document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga,s);
})();
_qoptions={qacct:"p-c1rF4kxgLUzNc"};
</script>
注意:请勿直接复制此代码段,GA会自动生成您的代码。