Uwaga: przeglądasz tę stronę na urządzeniu o niewielkim ekranie (szerokość < 640px). Niektóre zamieszczone w artykule ilustracje i animacje mogą stać się nieczytelne po dopasowaniu ich do rozdzielczości tego ekranu.
Yestok.pl
Jerzy Moruś
© Wszystkie prawa zastrzeżone. Wykorzystanie całości serwisu lub jego fragmentów bez pisemnej zgody autora zabronione.
Licznik pobrań pliku z własnej strony internetowej
Skrypty w języku PHP
Twórcy stron internetowych zamieszczają niekiedy w ich treściach łącza (linki) pozwalające pobrać z serwisu rozmaite pliki. Pliki zazwyczaj są (chociaż nie muszą) związane z tematyką stron internetowych, mogą to być np. cenniki, przykładowe rozwiązania omawianych zagadnień, instrukcje, opracowania i dowolne inne pliki.
Standardowym znacznikiem takiego łącza jest:
<a href="https://ścieżka do pliku/nazwapliku" title="podpis w dymku"> opis łącza</a>
Znacznik <a> ma oczywiście więcej atrybutów, ale jedynym koniecznym jest href.
Właściciel serwisu może być zainteresowany tym, ile razy konkretny plik był pobierany przez jego czytelników. Taką informację można czasami znaleźć w zasobach części administracyjnej serwisu, na stronach firmy świadczącej usługę hostingu. Można jednak samodzielnie zliczać każde pobranie i wykorzystać to na własne potrzeby.
Dla takiego sposobu zliczania przygotowałem skrypty, które – po włączeniu do serwisu – będą to robiły. Same skrypty napisałem w języku PHP, a więc będą się one wykonywały po stronie serwera. Ich wykonanie nie zależy zatem od ustawień przeglądarki Internauty.
Przygotowałem je przy następujących założeniach:
- Nie będzie wykorzystana żadna baza danych.
- Wszystkie pliki przeznaczone do ładowania ze stron internetowych będą umieszczone w dedykowanym folderze. Użytkownik sam może nadać własną nazwę. W przedstawionym rozwiązaniu jest to folder "do_pobrania" w ścieżce głównej serwisu.
- Z każdym plikiem, który ma być zliczany, powiązany będzie stowarzyszony plik tekstowy, o takiej samej nazwie jak pełna nazwa pliku, z rozszerzeniem TXT. Czyli np. z plikiem o nazwie "mój dokument.odt" będzie związany plik "mój dokument.odt.txt".
- Plik TXT zawierać będzie liczbę pobrań.
- Wszystkie pliki pobrań będą ulokowane w oddzielnym folderze. W przedstawionym rozwiązaniu jest to folder "zliczanie" w ścieżce głównej serwisu.
W proponowanym przeze mnie rozwiązaniu liczba pobrań zostanie wykorzystana do zmodyfikowania znacznika <a> w ten sposób, że będzie on zawierał dodatkowy atrybut "title", w którym będzie umieszczona liczba dotychczasowych pobrań.
Napisane skrypty znajdują się w folderze "procedury".
Pierwszy skryptem, który jest jednocześnie samodzielną stroną internetową, jest: "licz.php"
<?php
$co=$_GET['co'];
$plik="/zliczanie/".$co.".txt";
if (!file_exists($plik)) {
$file=fopen($plik, "w");
fwrite($file, 0);
flock($file, LOCK_UN);
fclose($file);
}
$file=fopen($plik, "r");
flock($file, LOCK_SH);
$ile=fread($file, 10);
flock($file, LOCK_UN);
$ile++;
fclose($file);
$file=fopen($plik, "w");
flock($file, LOCK_EX);
fwrite($file, $ile);
flock($file, LOCK_UN);
fclose($file);
$loc="Location: https://twójserwis.pl/do_pobrania/".$co;
header($loc);
?>
Ten skrypt wystarczy do tego, aby powstał i był modyfikowany licznik pobrań. Przy jego wywołaniu, do przekazania nazwy pliku, wykorzystana jest metoda GET.
Zmienna $co przejmuje nazwę pliku i na jej podstawie powstaje, w zmiennej $plik, nazwa pliku (wraz z całą ścieżka dostępu) zawierającego licznik pobrań.
Instrukcja If
sprawdza, czy taki plik już istnieje. Jeśli nie, tworzy go, wpisując liczbę pobrań 0.
Następnie plik ten jest otwierany i do zmiennej $ile wczytywana jest bieżąca wartość zapisana w pliku, a następnie wartość ta jest powiększana o 1 i ponownie zapisana w pliku. Następna instrukcja tworzy zmienną $loc, która zawiera kompletną strukturę parametru wymaganego przez funkcję header
. Funkcja header
przekierowuje odwołanie do folderu "do_pobrania" wskazując plik, którego nazwa znajduje się w zmiennej $co.
Aby wykorzystać ten skrypt, należy na swojej stronie utworzyć następujący znacznik <a>
<a href="https://twójserwis.pl/procedury/licz.php?co=plikdopobrania.abc">pobieranie pliku</a>
Strona, która zawiera taki znacznik, może być zapisana z rozszerzeniem "html", gdyż sama w sobie nie zawiera kodu w języku PHP. Tak utworzony znacznik należy powtarzać dla każdego innego pliku, którego pobranie chcemy zliczać.
Aby uprościć ten proces, napisałem drugi skrypt, którego zadaniem jest wytworzenie znacznika <a>. Skrypt zapisany jest w pliku tekstowym load.txt, także zapisanym w folderze "procedury".
Skrypt ten jest wywoływany (włączany) do strony, która będzie zawierała link do pobrania. Dlatego plik zawierający treść tej strony musi mieć nazwę z rozszerzeniem "php" a w miejscu, w którym ma pojawić się link do pobrania pliku, należy wpisać następujący kod:
<?php
$co="plikdopobrania.abc";
include("../procedury/load.txt");
?>
W tym kodzie do zmiennej $co wstawiamy nazwę pliku, który ma zostać udostępniony do pobrania. Instrukcja include
włącza do skryptu zawartość pliku load.txt, czyli dalszą część kodu.
Skrypt "load.txt" wygląda tak:
<?php
$plik="/zliczanie/".$co.".txt";
if (!file_exists($plik)) {
$file=fopen($plik, "w");
fwrite($file, 0);
flock($file, LOCK_UN);
fclose($file);
}
$file=fopen($plik, "r");
flock($file, LOCK_SH);
$ile=fread($file, 10);
flock($file, LOCK_UN);
fclose($file);
echo "<a href='https://twójserwis.pl/procedury/licz.php?co=".$co."'
title='Pobrań: ".$ile."'> ".$co."</a>";
?>
Na podstawie zawartości zmiennej $co tworzony jest tekst zmiennej $plik odpowiadający pełnej ścieżce dostępu z nazwą pliku zawierającego liczbę pobrań (analogicznie jak w licz.php). Tu także sprawdzane jest, czy plik pobrań już istnieje i jeśli nie – jest tworzony. Następnie do zmiennej $ile wczytywana jest zawartość tego pliku.
Ostatnia instrukcja (echo
) generuje na stronie znacznik <a>. Znacznik wywołuje stronę licz.php, ale zawiera dodatkowy atrybut "title", w którym znajduje się liczba dotychczasowych pobrań. Tekst tego atrybutu pojawi się po naprowadzeniu wskaźnika myszki na wygenerowany link. Opisem łącza, czyli tym co jest zawarte w znaczniku <a>, jest nazwa pliku przeznaczonego do pobrania.
Oba powyższe skrypty, pliki licz.php i load.txt umieściłem w skompresowanym kontenerze plików licznik.zip. Można pobrać ten kontener, wyekstrahować z niego oba pliki i po dopasowaniu ich zawartości do własnych preferencji włączyć do swego serwisu. Po nakierowaniu wskaźnika myszki na link, pojawi się opisana już podpowiedź, zawierająca liczbę dotychczasowych pobrań.
Kontener plików można pobrać stąd: licznik.zip