Jump to content
  • 0

Не работает счетчик


IceBeerG
 Share

Question

Счетчик посещений

<?php

$filename="counter.txt"; //присваиваем переменной имя файла в котором будут храниться данные

$fp=@fopen($filename, "r") or die ("Ошибка при открытии файла counter.txt");//открываем файл на чтение

if (file_exists("counter.txt")); //Проверяем существование файла counter.txt

else echo "Файл не найден";

if ($fp) //проверяем если в файле что-то есть

{

$counter=fgets($fp, 10); //читаем первые десять символов в переменную счетчика counter

fclose($fp); //закрываем файл

}

else //иначе

{

$counter=0; //присваиваем переменной счетчика counter 0

}

$counter++; //к текущему значению прибавляем 1

echo $counter; //выводим значение counter

$fp=@fopen($filename, "w"); //открываем файл на перезапись

if ($fp) //записываем новое значение счетчика, если успешно

{

$counter=fputs($fp, $counter);

fclose($fp); //закрываем файл

}

?>

Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0
<html>
<body>
Счетчик посещений
<?php
$filename="counter.txt"; //присваиваем переменной имя файла в котором будут храниться данные

if (!file_exists($filename)) {echo "Файл не найден";} else //Проверяем существование файла counter.txt
{
$fp=@fopen($filename, "r") or die ("Ошибка при открытии файла counter.txt");//открываем файл на чтение
$counter = fread($fp, filesize($filename));
fclose($fp);
}

if (!$counter) {$counter=0;} //присваиваем переменной счетчика counter 0
$counter++; //к текущему значению прибавляем 1
echo $counter; //выводим значение counter
$fp=@fopen($filename, "w") or die ("Ошибка при открытии файла counter.txt");
$counter=fputs($fp, $counter);
fclose($fp); //закрываем файл
?>
</body>
</html>

Link to comment
Share on other sites

  • 0

Итак, IceBeerG, сейчас я буду критиковать ваш скрипт...:)

Во-первых, вы нерационально используете переменную $filename.

Вы открываете файл, используя переменную $filename:

$fp=@fopen($filename, "r");

Далее пишете

or die ("Ошибка при открытии файла counter.txt");

Здесь уже используется конкретное имя файла. Также конкретное имя файла используется при проверке на существование файла. Я рекомендую вам сделать так:

$filename="counter.txt"; //присваиваем переменной имя файла в котором будут храниться данные
$fp=@fopen($filename, "r") or die ("Ошибка при открытии файла ".$filename); //открываем файл на чтение
if (file_exists($filename)); //Проверяем существование файла счетчика

Таким образом, скрипт становится мобильнее - вам нужно всего лишь поменять значение переменной $filename, чтобы изменить файл счетчика.

Во-вторых, вам не кажется, что логичнее было бы сначало проверить файл на существование, а потом пытаться его открыть?

В-третьих, одно из правил программирования на PHP - делать скрипты максимально автономными. И в вашем случае это возможно - вместо того, чтобы выводить сообщение о несуществовании файла, вы можете создать этот файл вручную.

Вот скрипт, который я предлагаю вам использовать. Это тот же ваш скрипт, только немного переделанный:

<html>
<body>
Счетчик посещений
<?php

$filename="counter.dat";
if (!file_exists($filename)){
$fh = @fopen($filename, "w+");
fputs($fh, '0');
fclose($fh);
}

$fp=fopen($filename, "r") or die ("Ошибка при открытии файла ".$filename);
$counter = fread($fp, filesize($filename));
fclose($fp);

echo ++$counter;

$fp=@fopen($filename, "w");
$counter=fputs($fp, $counter);
fclose($fp);
?>

</body>
</html>

Комментраии я не писал, я думаю, однако, если вы в них нуждаетесь, то я напишу.

К слову, такой счетчик нормально работает и с файлом counter.dat, и создает файл самостоятельно, без какого-либо вашего вмешательства.

Link to comment
Share on other sites

  • 0

Mostom А теперь я покритикую Ваш скрипт :)

Вы делаете лишнюю проверку на существование файла и его создание (открывая его зачем-то для записи и чтения "w+")

В конечном итоге У вас фаил и так сам создастся когда открываете на запись $fp=@fopen($filename, "w");

Вместо проверки можно просто прировнять к нулю сч?тчик если его не существует ...

В вообще, ИМХО, сч?тчики не стоит делать через чтение и запись файла ... ибо подсч?т будет не точный при большом количестве загрузок. т.к. вероятность одновременной загрузки страницы увеличивается

Link to comment
Share on other sites

  • 0

Ок, Evgeny, признаю свой недочет. Тогда прелагаю такой скрипт:

<html>
<body>
Счетчик посещений
<?php

$filename="counter.dat";
if (file_exists($filename)){
$fp=fopen($filename, "r") or die ("Ошибка при открытии файла ".$filename);
$counter = fread($fp, filesize($filename));
fclose($fp);
}else $counter=0;

echo ++$counter;

$fp=@fopen($filename, "w");
$counter=fputs($fp, $counter);
fclose($fp);
?>

</body>
</html>

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy