Что не так в этом коде?

ArsenT1

Пользователь
Регистрация
22.03.13
Сообщения
1
Реакции
0
Баллы
1
Здравствуйте друзья,

Я пытаюсь создать простой уникальный счетчик посещений с IP-адресом и файлом .txt.
Что не так в этом коде?
но почему-то этот код не работает... я использую сервер Wamp для проверки кода
это мой count.php

Код:
<?php
include "count.php";
hit_count();
?>

PHP: и это мой index.php

<?php function hit_count(){ $ip_address =$_SERVER["REMOTE_ADDR"]; $ip_file = file("ip.txt"); foreach($ip_file as $ip){ $ip_single = trim($ip); if($ip_address == $ip_single){ $found = true; break; }else{ $found = false; } } if($found==false){ $filename="count.txt"; $handle = fopen($filname,"r"); $current =fread($handle,filesize($filename)); //echo $current; fclose($handle); $current_inc = $current+1; $handle = fopen($filname,"w"); fwrite($handle,$current_inc); fclose($handle); $handle = fopen("ip.txt","a"); fwrite($handle,$ip_address . "\n"); fclose($handle); } } ?>
PHP: у меня есть файл ip.txt (это пусто) и файл count.txt (значение установлено равным 0) на сервере.
но когда я обновляю страницу..счетчик не учитывает посещения страниц..


Любые идеи?
 

MrPuzo

Пользователь
Регистрация
16.12.13
Сообщения
2
Реакции
0
Баллы
1
Большая часть программирования — это умение отлаживать. Добавьте туда несколько команд var_export(), чтобы посмотреть, какие переменные имеют. Сообщите нам, какие строки не делают то, что вы ожидаете, и опишите ваши ожидания в сравнении с тем, что делает ваш код.
 

Giorgi Kiskeidze

Пользователь
Регистрация
23.05.12
Сообщения
3
Реакции
0
Баллы
1
Начнем с мелочей
  • используйте filter_input(INPUT_SERVER, 'REMOTE_ADDR'), чтобы получить IP-адрес
  • в строке 19 у вас опечатка - вы называете $filename $filname
    $filename="count.txt";
    $handle = fopen($filname,"r");
  • Кажется, что обработка файлов не работает, слишком много открытий и ненужное закрытие.
Затем есть содержимое count.txt. Я не уверен, что, по вашему мнению, вы записываете - буквально просто количество просмотров?
 

Lyn41rus

Пользователь
Регистрация
15.02.15
Сообщения
3
Реакции
0
Баллы
1
Я согласен, что лучше всего использовать базу данных. Однако я бы не рассматривал IP-адрес как конфиденциальную информацию. IP-адрес человека можно увидеть в любом журнале сервера... Для этой цели подойдет плоский файл, если он не станет слишком большим. База данных кажется немного излишней
 

kazakhkyzy

Пользователь
Регистрация
01.01.70
Сообщения
3
Реакции
0
Баллы
1
Адрес
USA
спасибо, но это все равно не работает

вот модифицированный код
Код:
<?php
function hit_count(){ $ip_address =filter_input(INPUT_SERVER, "REMOTE_ADDR");
$ip_file = file("ip.txt");
foreach($ip_file as $ip){ $ip_single = trim($ip); if($ip_address == $ip_single){ $found = true; break; }else{ $found = false; }
} if($found==false){ $filename="count.txt"; $handle = fopen($filename,"r"); $current =fread($handle,filesize($filename)); fclose($handle); $current_inc = $current+1; $handle = fopen($filname,"w"); fwrite($handle,$current_inc); fclose($handle); $handle = fopen("ip.txt","a"); fwrite($handle,$ip_address . "\n"); fclose($handle); }
}
?>
PHP: я все еще изучаю PHP..так что это всего лишь учебник
 

SwiT1

Пользователь
Регистрация
31.12.15
Сообщения
2
Реакции
0
Баллы
1
@РахулСаини
Почему хранить IP в файле небезопасно? IP-адрес не имеет ничего чувствительного. Это не пароль.

С этим кодом есть 2 проблемы.

1. Ваш файл count.txt вначале пуст, поэтому эта строка ничего не делает:
$current_inc = $current+1;

Для начала поместите число в файл count.txt, и проблема будет решена.


2. Вы допустили опечатку в этой строке:
$filename="count.txt";
$handle = fopen($filname,"r");

Изменить на:
$handle = fopen($filname,"r");

Вы написали «$filname». Это должно быть "$filename"

Сделайте это, и все должно сработать. Наслаждаться!

При кодировании на Wamp держите отчеты об ошибках включенными. Он обнаружит множество ошибок, таких как опечатка $filename и т. д.
 

cnv_wap

Пользователь
Регистрация
29.08.13
Сообщения
1
Реакции
0
Баллы
1
1) почему бы просто не вернуть истинное условие RETURN? Пропустил бы кучу лишнего хлама.

Почему вы поневоле открываете и закрываете файлы и читаете их целиком?

Зачем читать весь файл, если можно преждевременно отключиться?

Код:
<?php
function hitCount(){
$ipAddress =$_SERVER["REMOTE_ADDR"];
$handle = fopen('ip.txt', 'r+');
while ($line = fgets($handle)) {
if ($line == $ipAddress) {
fclose($handle);
return;
}
}
fputs($ipAddress . "\r\n");
fclose($handle);
$handle = fopen('count.txt', 'r+');
$current = fread($handle);
fseek($handle, 0);
fwrite($handle, $current++);
fclose($handle);
}
Код (разметка): непроверенный, возможно, в нем есть опечатки, но, скорее всего, вы пытаетесь сделать это в более компактной и эффективной форме.
 

magic-cash

Пользователь
Регистрация
02.09.11
Сообщения
2
Реакции
0
Баллы
1
1) Проблема со строкой 21 — $current =fread($handle,filesize($filename)); Вы пытаетесь прочитать пустой файл, поэтому это не удается. Я бы объединил строки 21,22 и 23 в $current = file_get_contents($filename);

2) Опечатка в строке 27 - $handle = fopen($filname,"w"); должно быть $handle = fopen($filename,"w");

Как только я внес вышеуказанные изменения, у меня все заработало.
 
Сверху Снизу