我在这里有一个小脚本,可以在点击链接时对点击进行计数并将其存储在.txt文件中,但是当我在href下只有“click = yes”时它可以正常工作。但是当我链接到外部网站时,我无法跟踪点击次数。
这是我的代码:
<?php
if(!file_exists('counter.txt')){
file_put_contents('counter.txt', '0');
}
if($_GET['click'] == 'yes'){
file_put_contents('counter.txt', ((int) file_get_contents('counter.txt')) + 1);
header('Location: ' . $_SERVER['SCRIPT_NAME']);
die;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>counter example</title>
</head>
<body>
<h1><?php echo file_get_contents('counter.txt'); ?></h1>
<a href="http://www.google.com?click=yes" target="new">clickMe</a>
</body>
</html>
我的猜测是它必须对标题做一些事情('Location:'。$ _SERVER ['SCRIPT_NAME']);但我无法理解,所以我真的可以使用一些帮助。
以某种方式可以将多个链接保存到同一个文件中,当我在网站上显示它时,它从最大数量到最小数量排序?我知道如何使用MySQL数据库,但我不能在将要实现它的地方使用它。
提前致谢! 干杯!
答案 0 :(得分:1)
当客户端离开您的网页时,您的服务器永远不会看到 URI 被访问。要做这样的事情,最好设置一个像这样的
的重定向<a href="/goto.php?href=http://www.google.com" target="_blank">click me</a>
(确保外部网站的网址网址编码,因为您将网址的GET组件传递给您自己的网页)
然后在goto.php
中存储您的点击并发送重定向标题
if(!file_exists('counter.txt')){
file_put_contents('counter.txt', '0');
}
file_put_contents('counter.txt', ((int) file_get_contents('counter.txt')) + 1);
header('Location: ' . $_GET['href']);
现在您可以跟踪这些点击次数,您可以在goto.php
而不是文本文件中添加特定于域的计数器
答案 1 :(得分:1)
您可以使用Javascript来点击链接,通过AJAX调用发送数据。这是使用JQuery的小样本。
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
$(
function() {
$('a').click(linkClicked);
}
);
//this funciton will be called on every click on any link on page
function linkClicked() {
var url = $(this).attr('href');
//call PHP script to save URL ./saveurlclicks.php?url=CLICKEDURL
$.get('./saveurlclicks.php', {'url': url})
//be sure to return true so user can navigate further
return true;
}
</script>
</head>
<body>
<a href='/some href' >asasa</a>
<a href="www.google.com" >google</a>
</body>
</html>
<?php
//saveurlclicks.php
// here we save links in file but using serialized array
// if you need to get count of links clicked ,
// have a second script that unserializes array and sort it in revers order
$url = @$_GET['url'];
$counterFile = 'counter.ser';
if ($url) {
if(file_exist($filename))
$links = unserialize(file_get_contents($filename));
else $links=array();
if (!isset($links[$url])) {
$links[$url] = 0;
}
$links[$url] ++;
file_put_contents($counterFile, serialize($links));
}