Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Licznik - jak...
Forum PHP.pl > Forum > PHP
SonGoace
Mam pytanie, czy da sie zrobić licznik wielu stron w jednym pliku txt ? Chodzi mi o to. Mam galerię, około 2000 obrazów i chjciał bym zrobić licznik ile razy każdy obraz był otwierany. NIe wiem czy to ma jakieś znaczenie ale numer obrazu jest podawany, do strony na której ma być wyświetlony, w postaci zmiennej np. $obraz=15. Czy jest mozliwe zrobienie takiego licznika ? myślałem nad czyms w rodzaju każdego obrazu w innej lini danego pliku txt ale niebardzo wiem jak smile.gif Proszę o pomoc !
spenalzo
Masz tutaj schemat pliku txt, kod sobie dopisz. Podpowiem funkcje: explode, implode, file, fopen, fwrite.
Kod
1|4|

2|75|

...

78|57|

gdzie pierwsza kolumna to numer obrazka, druga kolumna ilość wyświetleń.
SonGoace
Pewnie jeszcze nie wspominałem ze jestem początkującym.
Nie znam tych funkcji: explode, implode, potrafie zrobić prosty licznik ale to mnie przerasta wiec oddam wszystko za kod tego licznika !
scanner
Wszystko znajdziesz tutaj.
DeyV
jak jesteś początkującym - nie utrudniaj sobie życia.
Dużo łatwiej bedzie Ci zrobić skrypt, który tworzy samodzielene pliki na potrzeby każej podstrony, każdego licznika.



_____________________________________
Wybaczcie
Siedzę sobie tu z taką miłą, cieplutką ... gorączką, która skutecznie mnie rozprasza...

Ale wiecie, wszystkie 'One' tak działąją...
SonGoace
DeyV, wiem ze było by łatwiej ale tego bylo by przeszło 2500 plików, ale ok, zrobie tak. Mimo wszystko dzięki sad.gif
Project
Cytat
jak jesteś początkującym - nie utrudniaj sobie rzycia.  
Dużo łatwiej bedzie Ci zrobić skrypt, który tworzy samodzielene pliki na potrzeby każej podstrony, każdego licznika.  
Wszystko ine to zbędna komplikacje


Ale ktos tu się spieszyl... hihi
smile.gif
Tyle bykow w jednym poscie... az nie wypada moderatorowi smile.gif
Pozdrawiam DeyV

PS Czym predzej bierz sie za edycje tego posta i usun byki i ortograficzne i gramatyczne...
scanner
Cytat
Wybaczcie
Wybaczamy.
ano
Oto kod php do zapisu w jednym pliku:
[php:1:a562a2dec5]
<?php

$plik=file("licznik.txt"); // otwierasz plik
$dane=explode("||", $plik[$obraz]); //z ktorej linijki
$dane[1]++;
$plik[$obraz]="$dane[0]||$dane[1]";

$plik_zap=fopen("licznik.txt", "w"); //wpisz ta sama nazwe pliku co na poczatku
for($i=0;$i<count($plik);$i++){
fputs($plik_zap, $plik[$i]);
}
fclose($plik_zap);
echo "<center>Ilość wyświetleń obrazka numer $obraz:<br>$dane[1]</center>";
?>[/php:1:a562a2dec5]

Tak ma wyglądać plik licznik.txt:
0||0
0||0
0||0
....itd.....
druga liczba (0) będzie się zwiększała, zrób tyle takich nowych linijek ile masz obrazków w galerii.
Cudi
Mam kilka pytań:
a) na co dwie liczby ?
cool.gif a co jak register_globals będzie off ? (nr obrazka będzie raczej pochodził z adresu...)
c) czy nie łatwiej zamiast pętli byłoby potraktować tablice implodem ?
SonGoace
wstawiłem skrypt i nie działał, prubowałem na różne sposoby i nic ! Moze jest w nim jakis błąd ? Prosze o pomoc
spenalzo
To raczej na pewno działa, podobny miałem u siebie.
[php:1:e88c1abd6a]<?php
function licznik($obrazek)
{
$plik="licznik.txt"; // plik z licznikiem
$file=file($plik);
$d=explode("|",$file[$obrazek]);
$d[1]++;
$d[2]="";
$file[$obrazek]=implode("|",$d);
$f=fopen($plik,"w");
for($i=0;$i<count($file); $i++)
{
fwrite($f,$file[$i]."n");
}
fclose($f);
return("Obrazek ".$obrazek." został wyświetlony ".$d[1]." razy");
}

// Wywołanie funkcji
echo licznik(16);
?>[/php:1:e88c1abd6a]
Pewnie da się to zrobić krócej, ale to działa.
spenalzo
Oczywiście najpierw musisz utworzyć plik z odpowiednią ilością pól. Plik powinien wygladać tak:
Kod
0|0|

1|0|

2|0|

3|0|

4|0|

...

80|0|


Cudi: są dwie liczby, ponieważ pierwsza określa ID obrazka, druga ilość jego wyświetleń.
SonGoace
Wiem ze zawracam wam głowy ale nadal nie działa. Fakt dodaje do licznika ale po każdym dodaniu plik licznika sie "dymie". Jeśli chce dodać do 1 pola kolejną wartość to zaraz po tej wartości dodaje czarny kwadracik, jesto on dodawany odrazu do wszystkich pól ponizej. Tak więc po kazdorazowej próbie dodania ten kwadracik jest powielany i w koncu plik licznik txt zwieksza sie do niebotycznych rozmiarów. A jak juz dodam do 1 to potem nie da sie dodać do np. 2, 3 ,4... Wiem ze chodzi tu o "n" ale jak to wykesle to wtedy skrypt niewidzi nastepnej lini po wpisaniu.
SonGoace
Juz sobie poradziłem, moze nie jest to tak jak byc powinno ale ziała ( dodałem 3 parametr $d[3]="n"; )
[php:1:ae065f0645]<?
function licznik($obrazek)
{
$plik="licznik.txt"; // plik z licznikiem
$file=file($plik);
$d=explode("|", $file[$obrazek]);
$d[1]++;
$d[2]="";
$d[3]="n";
$file[$obrazek]=implode("|", $d);
$f=fopen($plik, "w");
for($i=0;$i<count($file); $i++)
{
fwrite($f, $file[$i]);
}
fclose($f);
return("Obrazek ".$obrazek." został wyświetlony ".$d[1]." razy");
}

// Wywołanie funkcji
echo licznik($obrazek);
?>[/php:1:ae065f0645]

Ale teraz mam jeszcze jedną sprawe. Jak bez dodawania kolejnej wartości wyswietlic wynik licznika np. 2 :?:
scanner
To woła o pomstę do nieba... Wytnij z tego listingu linie odpowiedzialne za dodawanie i zapis i już.. Teraz tylko znaleźć w tablicy $d odpowiednia linijke i po sprawie.
Najprostrzy sposób (choć nie najergonomiczniejszy).
Cudi
Cytat
Cudi: są dwie liczby, ponieważ pierwsza określa ID obrazka, druga ilość jego wyświetleń.


Przecierz ID obrazka to linia... W taki sposób tylko komplikujesz sprawe i zwiększasz rozmiar pliku.

[php:1:fbc8da0198]<?php
$plik = 'dane.dat';
$o = $_GET['obraz'];

$f = file($plik);
$f[$o] += 1;
$f[$o] = $f[$o]."n";

$fp = fopen($plik, 'w');
fputs($fp, str_replace("r", '', implode('', $f)));
fclose($fp);

echo 'Ilość wyświetleń obrazka nr. '.$o.': '.$f[$o];
?>[/php:1:fbc8da0198]
SonGoace
Cudi, wielkie dzięki, działa idealnie smile.gifsmile.gifsmile.gif ps. z jakich książek sie uczycie php ? Doradźcie mi cos smile.gif
scanner
Cytat
Z jakich książek sie uczycie php ? Doradźcie mi cos smile.gif
Manual php - link w mojej sygnaturce smile.gif
Cudi
Jeszcze nie miałem w ręku książki o php, więc trudno będzie mi poradzić Ci coś z literatury. Uczyłem sie metodą prób i blędów, kombinując, oglądając czyjś kod i potem sprawdzająć objaśnienia funkcji w manualu, pytająć na różnych forach, gnębiąc znających sie na php kolegów itd. smile.gif
spenalzo
Cytat
Przecierz ID obrazka to linia... W taki sposób tylko komplikujesz sprawe i zwiększasz rozmiar pliku.

W tym przypadku tak, ale ten skrypt powyżej (lekko zmodyfikowany) używałem do zliacznia wyświetleń obrazków, z tym, że gdy nie było danej linii to licznik sam sobie dodwał, więc dlatego dwie wartości.
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.