Klient sobie zazyczyl liczniki odwiedzin w oparciu o system PIWIK. Chce, aby ilosci odwiedzin byly wyswietlane w poszczegolnych dzialach serwisu.
Przykladowy kod na wyswietlenie licznika na stronie glownej, w opraciu o API Piwika:
$date = "2013-09-27"; $token_auth = "ccc87a6a74d223e11840d9bb1c73711a"; $url = "http://przykladowy_adres.pl/piwik/?module=API&method=VisitsSummary.getVisits&idSite=1&period=range&date=$date,today&format=JSON&token_auth=$token_auth"; $content = file_get_contents($url); $arr = json_decode($content,true); <div style="text-align: right; font-weight: bold">Ilość odwiedzin: <?php echo $arr['value']; ?></div>
Problem pojawil sie, gdy za pomoca instrukcji switch() umieszczonej w templatce sprawdzam url adresu z dzialow podrzednych (jest ich 36). Po prostu serwis "przykuca" od tych wywolan (zwrotka z numerem 503 raz na jakis czas). Kod licznika jest niemal identyczny, jak ten ktory powyzej przedstawilem. Srednia ilosc uzytkownikow w serwisie w ciagu dnia jest rzedu ok. 300, wiec nie tak znowu duzo. Az sie boje pomyslec, co bedzie sie dzialo, jak uzytkownikow bedzie 1000.
Problem rozw. po czesci w ten sposob, ze uruchomilem do zadan demona CRON i zmuszam go odpalenia skryptu php. Co 5 minut "leci" po wszystkich url'ach z dzialami i zapisuje wartosci poszczegolnych odwiedzin do osobnych plikow tekstowych. Liczba odwiedzin dla strony glownej laduje w pliku: visits.txt, zas dla pozostalych w plikach ze wzorcem visits_nr.txt, gdzie nr to id danego dzialu. Tyle, ze czas wykonywania skryptu wynosi teraz mniej wiecej 25 sekund, czyli sporo jak na hosting na home.pl.
Kod realizujacy powyzsze zagadnienie jest mniej wiecej taki:
function SaveValue($fname, $value) { } } // Aktualności $url2 = "http://przykladowy_adres.pl/piwik/?module=API&method=Actions.getPageUrl&pageUrl=/aktualnosci&idSite=1&period=range&date=$date,today&format=JSON&token_auth=$token_auth"; $arr2 = json_decode($content2,true); SaveValue("visits_2.txt", $arr2[0]['nb_visits']);
W templatce odczytuje wartosc licznika przy uzyciu kodu:
<?php } ?>
Kieruje do Was pytanie: co bedzie wydajniejsze: zapisywanie licznikow odwiedzin do osobncyh plikow tekstowych i ich pozniejsze odczytywanie w zaleznosci od url, czy lepiej to wrzucic do jednego pliku, ktorego struktura bylaby mniej wiecej taka:
Kod
1|10234
2|987
3|13
4|4545
2|987
3|13
4|4545
Pozniej mozna by to zapisac do tablicy i w skrypcie php przetwarzac w odpowiedni sposob stringi (zmieniac wartosci licznikow w danych liniach pliku tekstowego). Ale co wtedy z dostepem do pliku, zapisem, odczytem, kiedy mamy do czynienia z 1000 odwiedzajcych?
Prosze o pomoc.