Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ranking podstron swojego serwisu
Forum PHP.pl > Forum > PHP
Szunaj85
Chciałbym wykonać ranking odwiedzin wybranych podstron swojego serwisu. Opisze jak by miało to wyglądać. Skrypt zliczałby wejścia na podstrony, a dane zapisywał i przechowywał np. w pliku/plikach txt. Myślę, że trzbaby wykonać coś na wzór licznika wejść/odwiedzin, najlepiej odporny na odświeżanie. Następnie w wybranej podstronie wyświetlałby wyniki, ale nie w formie ilości wejść lecz procentowej. Postaram się to pokazać na przykładzie. Na podstronę1 weszło najwięcej 500 osób, na podstronę2 300 osób, na podstronę3 100 osób, na podstronę4 100 osób, na podstronę5 0 osób.
Więc skrypt powinien wyświetlić taki wynik jak poniżej.
Gdyby jeższe dało się do tego dołożyć wykres np. w postaci pliku "gif", a jego długość zależałaby od ilości procent. U mnie wykres to znak "=". Nie pogardziłbym też segregacją stron przy wyświetlaniu od największej ilości procent do najmniejszej.

Ranking wejść:
Podstrona1 50% ==========
Podstrona2 30% ======
Podstrona3 10% ==
Podstrona4 10% ==
Podstrona5 0%
Tu się kłania matematyka. Wydaje mi się (trzymając się przykładu), że pierw powiniennem zsumować wszystkie osoby 500+300+100+100+0=1000, a następnie wykonać takie obliczenia według wzoru:
(100% * liczba wejść) : suma wszystkich osób = ilość procent

100% = 1000 osób (suma wszystkich osób)

(100%*500):1000 = 50%
(100%*300):1000 = 30%
(100%*100):1000 = 10%
(100%*100):1000 = 10%
(100%*0):1000 = 0%

Będę wdzięczny za wszelką pomoc. Sam też spróbuję pokombinować, może coś mi wyjdzie. Jednak nie za bardzo wiem jak się za to wziąć. Liczę na Wasze propozycje, a nie na gotowca. Proszę nie proponujcie mi rozbudowanych skryptów
z opcjami dla admnistratora! dry.gif
1010
I jaki problem?

Może spróbuj coś sam napisać, a jak coś nie będzie działać to pomożemy...

Na gotowca nie licz, chyba że w dziale Praca oferowana. Pomysł masz dobry. Wystarczy go zrealizować...
Cezar708
a może właśnie gotowiec Ci wystarczy?

tu wejdź i sprawdź opensourceowy bbClone

Pozdrawiam
Cezar708
Szunaj85
Za pomocą tego skryptu, który właśnie tworzę próbuję odczytać adresy IP plików txt, zliczyć i przerobić na procenty czyli ranking. Na razie nie jest ukończony. Proszę o pomoc w przerobieniu tego kodu. No i w jaki sposób miałbym zliczać
wejścia na stronę?
  1. <?php
  2. $strona_1 = file_get_contents('plik1.txt');
  3. $strona_2 = file_get_contents('plik2.txt');
  4. $strona_3 = file_get_contents('plik3.txt');
  5. $strona_4 = file_get_contents('plik4.txt');
  6. $strona_5 = file_get_contents('plik5.txt');
  7.  
  8. if ($strona_1 === false or $strona_2 === false or $strona_3 === false or $strona_4 === false or $strona_5 === false) {
  9. exit ("Błąd podczas próby otwarcia pliku!"); //zakończenie wykonywania skryptu
  10. } 
  11. while(!feof($plik))
  12. {
  13. $linie = fgets($plik,1024);
  14. $strona_1 = explode('\n',$linie);
  15. $strona_1;
  16. }
  17. while(!feof($plik))
  18. {
  19. $linie = fgets($plik,1024);
  20. $strona_2 = explode('\n',$linie);
  21. $strona_2;
  22. } 
  23. while(!feof($plik))
  24. {
  25. $linie = fgets($plik,1024);
  26. $strona_3 = explode('\n',$linie);
  27. $strona_3;
  28. } 
  29. while(!feof($plik))
  30. {
  31. $linie = fgets($plik,1024);
  32. $strona_4 = explode('\n',$linie);
  33. $strona_4;
  34. } 
  35. while(!feof($plik))
  36. {
  37. $linie = fgets($plik,1024);
  38. $strona_5 = explode('\n',$linie);
  39. $strona_5;
  40. }
  41.  
  42. $strona_1 + $strona_2 + $strona_3 + $strona_4 + $strona_5 = $suma;
  43.  
  44. (100% * $strona_1)/$suma = $ilosc_procent;
  45. (100% * $strona_2)/$suma = $ilosc_procent2;
  46. (100% * $strona_3)/$suma = $ilosc_procent3;
  47. (100% * $strona_4)/$suma = $ilosc_procent4;
  48. (100% * $strona_5)/$suma = $ilosc_procent5;
  49.  
  50. echo $ilosc_procent;
  51. echo $ilosc_procent2;
  52. echo $ilosc_procent3;
  53. echo $ilosc_procent4;
  54. echo $ilosc_procent5;
  55. ?>
em1X
ogólnie co do wzorów to kłania się podstawówka:

wszystkie wejścia to 100%
500 wejść to X%

mnożymy na krzyż i wyznaczamy X co daje:

x = (500 * 100) / wszystkie_wejscia
gdzie x to Twoja szukana procentowa wartość winksmiley.jpg
camikazee
Najlepiej właśnie z proporcji liczyć. Można zbudować prosty wskaźnik na zasadzie obrazka z regulowaną długością, Gdzie 100px równe będzie 100%. Tyleże jak rozkład będzie równomierny to wskaźniki króciutkie, więc można pomnożyć np x2 i wyjdą ładne wykresiki smile.gif
Szunaj85
camikazee twoją radę wezmę pod uwagę jednak może coś więcej na ten temat. Może masz jakiś przykład takiego wskaźnika. Druga sprawa to to, że wskaźnik nie na wiele się zda jeśli nie wesprzecie mnie przy tym skrypcie. Nie zapominajcie sam też próbuje. sciana.gif
em1X
Ale w czym problem.. musisz sobie pierw znaleźć jakiś obrazek do wykresu. Wystarczy taki:
http://images.wikia.com/openserving/sports.../vote-bar-1.gif

Pobierasz przez PHP dane i załóżmy, że są one takie:
- serwis 1 : 120 wejść
- serwis 2 : 499 wejść
- serwis 3 : 314 wejść

I liczysz proporcje dla każdego serwisu:
  1. <?php
  2. // maksymalna dlugosc dla wskaznika
  3. $max_length = 200;
  4.  
  5. // tablica serwisy to lista wejść serwisów
  6. // np. $serwisy = array(120,499,314);
  7.  
  8. // do tej zmiennej zapisujemy wyjscie
  9. $output = '';
  10.  
  11. foreach ($serwisy as $entries)
  12. {
  13. # $max_length - 100%
  14. # $entries - X
  15.  
  16. // na krzyz
  17. # x * $max_length = $entries * 100
  18.  
  19. // wyciagamy z rownania x, co daje
  20. # x = ($entries * 100) / $max_length
  21.  
  22. // zaokraglamy wynik do dolu, zeby otrzymac liczbe calkowita
  23. $x = floor(($entries * 100) / $max_length);
  24.  
  25. $output .= '<img src=\"bar.gif\" alt=\"bar\" width=\"'.$x.'\">
  26. ';
  27. }
  28.  
  29. print $output;
  30. ?>


To trzeba przerobić oczywiście, aby wyświetlało legendę czy ewentualne opisy poszczególnych wskaźników. Ale ogólnie działa i dobrze wyświetli obrazki. smile.gif Pozdrawiam </img src=\"bar.gif\" alt=\"bar\" width=\"'.$x.'\">
.radex
Po co angażować w to obrazki?

Kod
<div class="rankwrapper"><div class="rank" style="width:50%"></div></div>


i:

Kod
.rankwrapper
{
   border: 1px solid black;
   width: 100px;
}

.rank
{
   height: 8px;
}
Szunaj85
Chcę się zapytać czy w dobrym kierunku idę przy próbie odczytu ilości adresów IP w pliku txt, a cały kod znajduje się w 4 poście. Dodam jeszcze, że każdy adres IP znajduje się w nowej lini. Jeśli źle się za to wziołem proszę o uwagi w jaki sposób zrobić to lepiej. Jeśli istnieją techniki skrócenia kodu też proszę o komentarz. worriedsmiley.gif
em1X
tylko nie wiem po co się tak męczysz z tym otwieraniem pliku skoro wystarczy:

  1. <?php
  2. // i dane pobrane
  3. $dane = file_get_contents('plik1.txt');
  4. ?>
Szunaj85
Ekspertem w tej dziedzinie nie jestem. Nie znam jeszcze wielu poleceń. Poprawiłem kod tak jak zasugerował em1X. Proszę o kolejne uwagi.
em1X
Podałem Ci praktyczne rozwiązanie słupków. Po co odczytujesz adresy IP z tych 4 plików tekstowych?
Szunaj85
W 1 poście wszystko opisałem, jednak nie ma tam odpowiedzi na Twoje pytanie. Licznik, który mam zapisuje IP użytkownika do pliku i tam przechowuje te IP. Dzięki temu licznik jest w stanie stwierdzić ile było wejść na podstawie ilości adresów IP znajdujących się w pliku txt.
Czyli 1 IP = 1 wejście. Ja natomiast chcę wykorzystać te dane do stworzenia statystyk odczytując ilość adresów IP
z pliku/plików txt. tongue.gif
Pewnie ranking można by było zbudować inaczej jednak ja nie mam takiego skryptu i zrobić to też nie za bardzo umiem.

Cytat(Szunaj85 @ 29.05.2008, 20:05:04 ) *
  1. <?php
  2. // i dane pobrane
  3. $dane = file_get_contents('plik1.txt');
  4. ?>

A jak w ten sposób pobrać dane z tablicy zawierającej kilka plików?
em1X
a ja wiem.. jakkolwiek:

  1. <?php
  2. $dane = '';
  3.  
  4. foreach ($arrFiles as $plik) {
  5.  $dane .= file_get_contents($plik);
  6. }
  7. ?>
Szunaj85
Ja natomiast zrobiłem coś takiego. Odczytuje z plików txt liczby i mogę wyświetlić je jedna pod drugą, ale choć wiem jak te obliczenia zrobić nie wiem jak je wpisać w PHP, żeby w końcu wyszedł wynik w procentach dla każdego pliku osobno. Szczegóły opisałem w pierwszym poście. Tak myślę, że te zmienne trzeba w jakiś sposób przechować, aż pętla zakończy swoje działanie. Tylko nie wiem jak. Potem je zsumować. No i reszta obliczeń. Dodam, że z zapisem plików już sobie poradziłem. sadsmiley02.gif
  1. <?php
  2. $dane = array('plik1.txt', 'plik2.txt', 'plik3.txt');
  3. foreach ($dane as $plik) {
  4. if (file_exists($plik)){// i dane pobrane 
  5. echo $plik.'<br />'; 
  6.  }
  7. }
  8. ?>
em1X
logika.. musisz najpierw utworzyc tablice czestosci dla kazdego adresu:

[192.168.0.1] => 20 wejsc
[212.25.100.16] => 10 wejsc
[19.19.19.1] => 17 wejsc

Po utworzeniu takiej tablicy masz wszystkie niezbedne dane (ilosci poszczegolnych wejsc (20,10,17) oraz suma wejsc (47)) do wyrysowania słupków jak napisałem wyżej przykład.
Szunaj85
Cytat(em1X @ 29.05.2008, 22:12:19 ) *
logika.. musisz najpierw utworzyc tablice czestosci dla kazdego adresu:

Co to jest tablica czestosci? Z twojego przykładu można zrozumieć, że dany użytkownik o konkretnym IP wchodził na stronę ileś tam razy. A to wcale tak nie działa w moim przypadku. I czy mógłbyś troszkę więcej szczegółów podać. Ogólnie chcę odczytać ilość adresów IP z każdego pliku, porobić obliczenia i wyświetlić.
em1X
Skad ja mam wiedziec jak to w Twoim przypadku wyglada skoro nie pokazales przykladowego pliku txt ? sciana.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.