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:

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