Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Счётчик
 
 автор: Diablo_   (29.04.2006 в 00:20)   письмо автору
 
 

Всем привет!
Есть проблема, надеюсь, вы поможете её решить!
Написал, счётчик для страниц, а точнее, сколько раз прочитали. В коде, используется функция flock (запирание файла), записывается и считывается информация, из одного файла. Всё работает нормально, одно время, а потом, файл просто обнуляется, а точнее, в нём, остаётся, всего один символ “|”. Суппорт хостинга, говорит, что это, логическая ошибка скрипта!

Плизззз, гляньте, есть ли в коде ошибка! Я уже, 3 недели парюсь!

Вот код:

[CODE]
<?
if (@$_REQUEST['id'])
{
$file_counter = "base/counter.dat";
$data='';
if (file_exists($file_counter))
{
$fp = fopen($file_counter, "r+");
while (!feof($fp))
{
list($change1,$change2)=explode("|", fgets($fp));
if (@$_REQUEST['id']==$change1)
{
$counter=$change2;
$counter=$counter+1;
if (!feof($fp))
{
$data=$data.$change1.'|'.$counter."\n";
}
else
{
$data=$data.$change1.'|'.$counter;
}
}
else
{
$data=$data.$change1.'|'.$change2;
}
}
}

fclose($fp);

$fp = fopen($file_counter, "a");
flock($fp,LOCK_EX);
if(flock($fp,LOCK_EX)){
ftruncate($fp,0);
fputs($fp, $data);
flock($fp,LOCK_UN);
fclose($fp);
}
}
?>
[/CODE]

   
 
 автор: cheops   (29.04.2006 в 10:19)   письмо автору
 
   для: Diablo_   (29.04.2006 в 00:20)
 

Замысловато... а что должен делать счётчик? Опишите алгоритм его действия на словах, если не сложно?

   
 
 автор: Diablo_   (29.04.2006 в 12:37)   письмо автору
 
   для: cheops   (29.04.2006 в 10:19)
 

Да всё просто! Он подсчитывает, сколько раз прочитали статью, а то есть, нажали на ту, или иную ссылку на сайте, которая есть в базе (base/counter.dat)!
Мне говорят, что бы я делал через (serialize/unserialize). Но я не знаю как с этим работать!

   
 
 автор: Diablo_   (29.04.2006 в 16:01)   письмо автору
 
   для: Diablo_   (29.04.2006 в 12:37)
 

Плиззззз, помогите, очень нужно!!!! Проблему никак не решить!

   
 
 автор: Саня   (29.04.2006 в 22:57)   письмо автору
 
   для: Diablo_   (29.04.2006 в 00:20)
 

А пример файла counter.dat можно?

   
 
 автор: Diablo_   (30.04.2006 в 00:28)   письмо автору
 
   для: Саня   (29.04.2006 в 22:57)
 

Да, конечно!
home|1
download|2
kontakt|3
и тд...!

   
 
 автор: WebTech   (30.04.2006 в 11:43)   письмо автору
 
   для: Diablo_   (30.04.2006 в 00:28)
 


<?php

$arr 
file("base/counter.dat");

$fp fopen("base/counter.dat""a");
flock($fpLOCK_EX); 
ftruncate($fp0); 

$id $_REQUEST["id"];

for (
$i=0$i<count($arr); $i++)
{
list(
$link$counter) = explode("|"str_replace ("\n"""$arr[$i]));
if (
$link == $id)
  {
  
$counter += 1;
  }
fwrite($fp$link."|".$counter."\n");
}

flock($fpLOCK_UN);

?>

   
 
 автор: Diablo_   (30.04.2006 в 14:53)   письмо автору
 
   для: WebTech   (30.04.2006 в 11:43)
 

Огромное спасибо!
Постоянно выдаёт ошибку вот в этой строке:
$id = $_REQUEST["id"];
вот эту ошибку:
Notice: Undefined index: id in
Но всё работает отлично! Что нужно дописать?

   
 
 автор: WebTech   (30.04.2006 в 17:08)   письмо автору
 
   для: Diablo_   (30.04.2006 в 14:53)
 

Notice - это еще не ошибка, а уведомление, что выполняемые действия могут быть ошибочными.
Чтобы отключить это, надо в начале скрипта поставить функцию

error_reporting(E_ALL & ~E_NOTICE);

либо в php.ini изменить параметр error_reporting точно так же

error_reporting = E_ALL & ~E_NOTICE

либо запретить вывод ошибок (тоже в php.ini)

display_errors = Off

   
 
 автор: Diablo_   (30.04.2006 в 20:36)   письмо автору
 
   для: WebTech   (30.04.2006 в 17:08)
 

Спасибо! разобрался! Достаточно было поставить @!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования