|
|
|
| Есть ли у кого нибудь пример простого скрипта, без базы данных, для нажатия на линк? | |
|
|
|
|
|
|
|
для: cccp
(20.11.2005 в 01:56)
| | Линк должен вести на промежуточную страничку. Скажем, если вы хотите попасть на www.aaa.com , а ваша страничка с линком - www.bbb.com/page.php , то на нее ставите href="count.php?url=<?print urlencode("www.aaa.com");?>
А на count.php - запись, куда надо, а потом: header("Location: ".urldecode($_GET['url'])); | |
|
|
|
|
|
|
|
для: Shorr Kan
(20.11.2005 в 03:02)
| | а как выгледит "запись" на count.php ? | |
|
|
|
|
|
|
|
для: cccp
(20.11.2005 в 12:32)
| |
<?
@preg_match("/^(http:\/\/)?([^\/]+)/i", $_GET['url'], $matches); // www
@$host = $matches[2]; // адрес
$fopen = fopen ($host.'.log',"a+"); // открываем или создаем файл с именем ссылки
$data = '';
$data .= date("Y-m-d h:i:s"); // Время перехода
$data .= "\t";
$data .= $_SERVER['HTTP_REFERER']; // Откуда пользователь переходит
$data .= "\t";
$data .= $_SERVER['HTTP_USER_AGENT']; // Браузер пользователя
$data .= "\n";
fwrite($fopen,$data); // Пишем
fclose($fopen); .. Закрываем
header('Location: '.$_GET['url']); // Переходим по ссылке
?>
|
| |
|
|
|
|
|
|
|
для: Akira
(20.11.2005 в 13:07)
| | ок, я попоробовал. Всё получаестя.
Я кое-какие ваши ошибки исправил. Вы видемо торопились.
Только это не совсем то что я хотел.
Мне нужно было просто что бы скрипт считал типа 1, 2 и т.д. , раза нажато на линк. | |
|
|
|
|
|
|
|
для: cccp
(20.11.2005 в 15:21)
| | так считал и куда-то записывал ? или просто выводил инф-ю о количестве кликов для определенного пользователя ?
скрипт зависит от конечного результата, который тебе нужен. | |
|
|
|
|
|
|
|
для: goddamn
(20.11.2005 в 16:04)
| | считал и куда-то записывал.
А вивести информацию, это просто, это я знаю как сделать (с помощью "<?php include("..."); ?>") | |
|
|
|
|
|
|
|
для: cccp
(20.11.2005 в 16:11)
| | Как сосчитать?
<?
$files= glob ("*.log"); // Все log файлы ссылок
foreach ($files as $host) {
echo $host.": ".count(file($host));
echo "<br>";
}
?>
|
| |
|
|
|
|
|
|
|
для: Akira
(20.11.2005 в 16:49)
| | А как совместить эти два скрипта?
Я пробовал, но запутался. | |
|
|
|
|
|
|
|
для: cccp
(20.11.2005 в 17:25)
| | Последний скрипт, запускаеться как отдельный файл, в той же папке где и лог файлы. | |
|
|
|
|
|
|
|
для: cccp
(20.11.2005 в 16:11)
| | ! | |
|
|
|
|
|
|
|
для: cccp
(20.11.2005 в 16:11)
| | >Только это не совсем то что я хотел.
>Мне нужно было просто что бы скрипт считал типа 1, 2 и т.д. , раза нажато на линк.
т.е. формат записи в файле должен быть типа такого link cont
тогда ссылки, которые хочешь считать д.б. вида <a href="count.php?url=<?print urlencode("www.aaa.com");?>
см. пост Akira - все правильно, но если нужно только количество кликов, то
<?
$encodedurl = urlencode($url); // переводим в нормальный вид
$logfilename = "clicks.log";
$logfile = fopen($logfilename,"r+"); // открываем файл-базу
$log = file($logfilename); //считываем все в массив $log
$linenum = 0;
foreach($log as $data) // проверяем сходство $url и значение линка в каждой строке
{
$link = explode("\t",$data);
if (strcasecmp($link[0],$encodedurl) == 0) // если совпадает, то ...
{
$log[$linenum] = $link[0]."\t".($link[1]+1)."\r\n"; // обновляем данне
$found = true; // создаем флаг, что этот линк есть в списке
break 1;
}
$linenum++;
}
if (!$found) // если линка в списке не было, то добавляем новый со значением счетчика = 1
{
$log[] = $encodedurl."\t1\r\n";
}
foreach($log as $data) // делаем новый список с учетом обновлений
{
$newdata .= $data;
}
fwrite($logfile,$newdata); // пишем новый список в файл
fclose($log); // закрываем
header('Location: '.$_GET['url']); // Переходим по ссылке
?>
|
типа того
формат файла links.log link[tab]count
[tab] - таб | |
|
|
|
|
|
|
|
для: goddamn
(20.11.2005 в 17:25)
| | Спасибо ещё раз.
А можно в писать в последний скрипт строчку даты посещения "Y-m-d h:i:s"?
Что бы получился резултат типо:
Посетили: 12 (раз)
Последнее посещение: 21-11-2005 в 22:00
так сделать можно?
На этой строчке:
поставить так:
$newdata .= $data("Y-m-d h:i");
|
Правильно? | |
|
|
|
|
|
|
|
для: cccp
(21.11.2005 в 12:19)
| | Что-то какая-то путаница получилась....
В файле .log у меня идёт запись такого типа:
galeries%2Fgalerie_%2Findex.php3 3
А после нажатия на линк,
каторый такго типа:
<a href="count.php?url=<?print urlencode("galeries/galerie_2/index.php3");?>"
у меня такая ошибка:
Warning: fclose(): supplied argument is not a valid stream resource in click.php on line 30
Warning: Cannot modify header information - headers already sent by (output started at /var/www/63/p/g/o/ikara.com/count.php:30) in count.php on line 32 | |
|
|
|
|
|
|
|
для: cccp
(21.11.2005 в 12:19)
| | по обоим вопросам сразу
<?
$encodedurl = urldecode($url); // переводим в нормальный вид
$logfilename = "clicks.log";
$log = file($logfilename); //считываем все в массив $log
$logfile = fopen($logfilename,"w"); // открываем файл-базу для записи
$linenum = 0;
foreach($log as $data) // проверяем сходство $url и значение линка в каждой строке
{
$link = explode("\t",$data);
if (strcasecmp($link[0],$encodedurl) == 0) // если совпадает, то ...
{
$log[$linenum] = $link[0]."\t".($link[1]+1)."\t".date('Y-m-d H:i')."\r\n"; // обновляем данне
$found = true; // создаем флаг, что этот линк есть в списке
break 1;
}
$linenum++;
}
if (!$found) // если линка в списке не было, то добавляем новый со значением счетчика = 1
{
$log[] = $encodedurl."\t1\t".date('Y-m-d H:i')."\r\n";
}
foreach($log as $data) // делаем новый список с учетом обновлений
{
$newdata .= $data;
}
fwrite($logfile,$newdata); // пишем новый список в файл
fclose($log); // закрываем
header('Location: '.$_GET['url']); // Переходим по ссылке
?>
|
скрипт проверил, работает.
ссылки пиши так :
<a href="counter.php?url=<?print urlencode("./index1.html");?>">1</a>
<a href="counter.php?url=<?print urlencode("./index2.html");?>">2</a>
<a href="counter.php?url=<?print urlencode("./index3.html");?>">3</a>
запись в clicks.log будет такая :
./index1.html 2 2005-11-21 20:45
./index3.html 1 2005-11-21 20:45
./index2.html 5 2005-11-21 20:45
вот. если что - пиши. | |
|
|
|
|
|
|
|
для: goddamn
(21.11.2005 в 20:20)
| | Спасибо.
Только у меня таже ошибка при нажатии на линк с этим Warning: fclose():
И вообще-то запись в log юрл ./index1.html мне не нужна.
Только так 2 2005-11-21 20:45 уже хорошо !
;) | |
|
|
|
|
|
|
|
для: cccp
(21.11.2005 в 22:10)
| | ссылки были для примера и теста :) вместо ./html1 у тебя будут свои линки, на которые ты поставишь ссылки.
по поводу ошибки - а файл clicks.log вобще создается/изменяется ? если нет, то пропиши в $logfilename путь к файлу от / , т.е. /path/to/file/clicks.log
и посмотри логи! там об ошибках дожно протоколироваться :) | |
|
|
|
|
|
|
|
для: goddamn
(21.11.2005 в 22:23)
| | Я понял что линки мне надо свои ставить.
Я так и делал, просто для примера оставил ваши.
файл .log создаётся и изменяется....
Но ошибка всё ранво такая-же. даже если путь к файлу в виде "/path/to/file/clicks.log" (естественно с моим правельным path) | |
|
|
|
|
|
|
|
для: cccp
(21.11.2005 в 22:38)
| | извини,недосмотрел.
fclose($logfile); // закрываем
| каюсь,виноват ... | |
|
|
|
|
|
|
|
для: goddamn
(21.11.2005 в 22:55)
| | Спасибо!
Так всё ОК.
Только мне надо было путь к файлу поставить типа: path/to/file/clicks.log
goddamn.
А как убрать строчку котороя записывает сам линк, типа: index1.html
так-как мне это не надо.
Просто хотел что бы записывало просто 2 2005-11-21 20:45
А я потом переделаю на типа:
Посетили: 2 раз(а)
Последний раз: 2005-11-21 в 20:45
Зарание спасибо! | |
|
|
|
|
|
|
|
для: cccp
(23.11.2005 в 01:02)
| | так если будет записывать как 2 2005-11-21 20:45, как потом разберешься, к какому линку это относится ??? чего-то не пойму :) ведь каждая строчка для своего линка, иначе скрипт по-другому писать нужно было :)
ну а так, $encodedurl и $link[0] - это и есть линк (типа index.html)... просто не добавляешь его к данным, если не нужно записывать. но опять же, получается противоречие .. | |
|
|
|
|
|
|
|
для: goddamn
(23.11.2005 в 12:06)
| | Ну я вообше-то думал что вожможно сделать так что бы каждый линк записывал свой log файл.
Тогда можно было бы использовать лиш один скрипт для всех линков.
Но это всё мои идеи, а сам я не в состоянии сделать это, поэтому думал использовать этот (ваш) скрипт, переименоувая для каждого линка...Что само сабой делает больше файлов и занимает больше места на сервере.
Как вы думаете?
Что посоветуете? | |
|
|
|
|
|
|
|
для: cccp
(23.11.2005 в 19:45)
| | вам решать - много маленьких файлов или один большой. если первый вариант, то скрипт немного переписать надо. единственное, какие имена будут у файлов при 1-м варианте ? представили ? если линк = ./abc/def/ghijk/lmnopqrst/?id=1&tratata=1000&aaa=%0A%0D%0E%0C---~_,-,-,-~ что тогда ? :) | |
|
|
|
|
|
|
|
для: goddamn
(23.11.2005 в 19:58)
| | Ну не знаю...
Неужели нельзя сделать что бы он отталкивался от вписанного id на самом линке в этой строчке, a?
<a href="click.php?url=<?print urlencode("papka/index.php3");?>" | |
|
|
|
|
|
|
|
для: cccp
(23.11.2005 в 20:06)
| | может есть у кого-то подобный скипт? | |
|
|
|
|
|
|
|
для: cccp
(24.11.2005 в 14:42)
| | Посмотрите,
нашол такой вот скрипт.
Работает хорошо. Он вообше-то для счётчика скачивания файлов, но я ему указал файл .php считать, получается тоже самое.
Поскажите как можно сюда добавить строчку для результата типа:
последний раз нажато : 24-11-2005 в 12:00
Неимоверно благодарен !!!
<SCRIPT LANGUAGE="php">
/////////////////////////////////////////////////////////////////////////////
//// COMPTEUR DE TELECHARGEMENTS ////
//// <2005 Version 1.00> ////
//// (c) <nazdorovie> ////
/////////////////////////////////////////////////////////////////////////////
//// ParamŠtre en entr‚e : $Fichier : nom du fichier à télécharger (doit )
//// obligatoirement être dans le même
//// répertoire que le script.
//// Appel du script : <A HREF="download.php3?Fichier=toto.zip">
//// Fichier Compteur = $Fichier+.dat;
//// 07/00 : Suppression des références à BC-Math
/////////////////////////////////////////////////////////////////////////////
$FileCompteur=$Fichier.".dat";
///------Fonctions Lock et Unlock d'aprŠs Etienne De Toqueville--------------
Function lock($file) {
$timeout = 30; // Timeout (secondes) PHP
$retry = 5; // Temps maxi (secondes) d'attente avant abandon
$delay = 0.1; // Durée d'attente (secondes) entre chaque test
if (file_exists($file.".lck")) {
$time = @filemtime($file.".lck");
if ($time) {
$since = time() - $time;
if ($since > $timeout) unlink($file.".lck");
}
}
for($i = 0; $i < $retry; $i += $delay) {
if (!file_exists($file.".lck")) {
$idlck=fopen($file.".lck","w");
fclose($idlck);
return 1;
}
usleep($delay * 1000000);
}
return 0;
}
///-------------------------------------------------------------------------
Function unlock($file) {
$i = @unlink($file.".lck");
return $i;
}
///-------------------------------------------------------------------------
Function Error($Msg){
Echo $Msg;
FinPres();
Exit("");
}
///-------------------------------------------------------------------------
if (!file_exists($FileCompteur)){
$Compteur=1;
$Fp=fopen($FileCompteur,"w");
fputs($Fp,$Compteur);
fclose($Fp);
}
else{
if (!lock($FileCompteur)) Error("Occupé ! Recommencez plus tard. Merci.");
$Fp=fopen($FileCompteur,"r");
$Compteur=Trim(fgets($Fp,255))+1;
fclose($Fp);
$Fp=fopen($FileCompteur,"w");
fputs($Fp,$Compteur);
fclose($Fp);
unlock($FileCompteur);
}
Header("Location: ".$Fichier);
Exit("");
</SCRIPT>
|
| |
|
|
|