[PHP]Bezpośredni licznik pobrań.

0

Wiem że temet liczników jest wałkowany od dawna, ale mi chodzi o coś nieco innego. Mianowicie, chciałbym aby mój licznik zliczał każde odwołanie do danego pliku tzn. aby m.in. każde kliknięcie na link powodowało zwiększenie wartości w pliku licznik.txt (MySql odpada). Ma być to link prosty np www.strona.pl/plik.zip a nie link do dodatkowego pliku np. download.php w którym jest skrypt i automatyczne przekierowanie do żądanego pliku. Tak więc licznik powinien działać również wtedy gdy adres pobieranego plku zostanie wpisany bezpośrednio do przeglądarki, a także jeśli odwoła sie do niego jakiś menedżer dowloadu (w tym również Httpget w Delphi). Mam nadzieje że nie namotałem za bardzo i że da się to jakoś zrobić.

0

w .htaccess:
Rewriteengine on
RewriteRule ^/download/(.*) /download.php?name=$1

w download.php:

<?
  $root = './';
  $file = $_GET['name'];
  if (!file_exists($root.'download/'.$file))
  {
      header("HTTP/1.0 404 Not Found");
  }
  $pl = fopen($root.'logs/'.$file, 'r');
  $cnt = fgets($pl);
  $cnt++;
  fclose($pl);
  $pl = fopen($root.'logs/'.$file, 'w');
  fwrite($pl, $cnt);
  fclose($pl);


  header('Content-type: '. mime_content_type($root.'download/'.$file));
  header('Content-Disposition: attachment; filename='.$file);
  readfile($root.'download/'.$file);

?>

Kod pisany z głowy - nie testowany i niebezpieczny.

0

Dzięki, ale czy mógłbyś tak po polskiemu. Na razie PHP to dla mnie czarna magia i prosiłbym o instrukcję jak to zastosować np. gdzie podać nazwę pliku, który skrypt ma pilnować czy ktoś chce go pobrać?

0

No więc tak:

w / siedzą pliki .htaccess, odpowiaa on za włączenie mod_rewrite, i przekierowanie wszelkich odwołań do folderu /download to pliku download.php siedzącego w / serwera, dodatkowo przekazuje mu jako parametr name nazwkę pliku który ktoś chce pobrać z katalogu /download.

Skrypt download.php na podstawie przekazanego mu parametru name z nazwa ściąganego pliku sprawdza istnienie pliku, a nastepnie (jesli istnieje) otwiera plik tekstowy o nazwie takiej jak ściągany z katalogu /logs, odczytuje ilość ściągnięć, dodaje jeden (++) i zapisuje. Na końcu wysyła do przeglądarki (header) content-type pliku, jego nazwę, a nastepnie sam plik.

0

Czy dobrze skumałem?
W kaktalogu /download siedzi np. plik "do_pobrania.zip".
W katalogu /logs jest plik tekstowy o takiej samej nazwie i w nim jest liczba odwołań do pliku "dowload/do_pobrania.zip".
Jeśli cokolwiek (IE, Opera, DAP itp.) zażąda pliku "do_pobrania.zip" najpierw uruchomi się skrypt "download.php" i jak zrobi co trzeba, czyli zikrementuje liczbę w pliku "logs/do_pobrania.zip", to zezwoli na dostęp do pobieranego pliku.
Czyli każdy plik w katalogu /dowload powinien mieć swój plik tekstowy o takiej samej nazwie w /logs.
W żadnym skrypcie nie podaje nawet nazwy "monitorowanych" plików bo przekazywane są one jako parametr do "dowload.php". Fajne i nawet chyba zajarzyłem.

Ale niestety jest jeszcze pewnien problem. O co chodzi z:

[...] w / siedzą pliki .htaccess, odpowiaa on za włączenie mod_rewrite[...]

Co to za pliki (lub plik) .htaccess? Nazwa zaczyna się od kropki??? Może mało widziałem, ale czegoś takiego to nie spotkałem. Czy mam stworzyć taki plik, bo ja go u siebie na serwerze nie widzę. A jakoś muszę się do niego dostać żeby podać nazwę katalogu i skryptu. O co biega?

P.S. Sorki za niezwięzłowatość, ale jakiś taki gadatliwy jestem.

/// Dopisane
Pogooglowałem trochę i dowiedziałem się że plik .htaccess jest elementem Apacza. A co jeśli moja stronka jest na jakimś inny serwerze (nawet nie wiem jakim)? I jak utworzyć taki plik w Windzie? Dla Windowsa jest to plik bez nazwy, samo rozszerzenie. Wiem że takie kwiatki to w pingwinach występuję, a ja żadnego nie posiadam. Jak z tego wybrnąć w Win98?

0

Jeśli dobrze pamiętam, to na unixach/linuxach nazwy zaczynające się kropką informują, że plik jest ukryty.

Bagietka napisał(a)

Jak z tego wybrnąć w Win98?
Skoro nie masz Apache, to masz PWS [MS Personal Web Server].
Rozwiązaniem moze być to: http://4programmers.net/Forum/216341

0

Więc tak:
Aby użyć plików .htaccess muszę się dowiedzieć od Admina czy serwer na którym jest moja stronka (forAll.pl) to Apacz. Jeśłi tak to czy mam dostęp do tych plików. Ale to już ustale z Adminem.
A idąc dalej: Postanowiłem postawić własny serwer na swoim kompie. Zainstalowałem sobie program WebServ zawierający Apache 2.0.52, PHP 5.0.3 i MySQL 4.0.23, uruchomiłem, działa. A więc stronka jest na Apaczu, ale pod Windowsem i pliku .htacces i tak nie utworzę. Co teraz? Jak włączyć ten mod_rewrite w Apaczu Windowsowskim? A może jest jakiś inny sposób?
A tak na marginesie, znacie może jakieś darmowe serwery bez reklam z obsługą PHP i MySQL oraz dostępem do .htaccess?

0
Bagietka napisał(a)

ale pod Windowsem i pliku .htacces i tak nie utworzę
http://4programmers.net/Forum/238901?h=htaccess#238901

0

Plik .htaccess utworzony. Wystarczył "bat" i "ren 1.htaccess .htaccess". Jakie to proste. Zobaczymy czy będzie działać. Dzieki za pomoc.


No i pupa. Nie działa. Zrobiłem tak jak zalecał Qyon, czyli:
W katalogu głównym mojego serwera są katalogi: "download" i "logs" oraz pliki: "index.html", ".htaccess" i "download.php".
W download jest plik do pobrania "1.zip", a w logs jest plik tekstowy z wpisaną liczbą "1" o nazwie również "1.zip".
W pliku "\apache2\conf\httpd.conf" odkomentowałem linię
"LoadModule rewrite_module modules/mod_rewrite.so".
Uruchamiam serwer, wchodzą na stronę główną, klikam na link do pliku "download/1.zip" i... plik się pobiera. Niestety w pliku "logs/1.zip" jest nadal "1". Na próbę wpisałem do ".htaccess" inny (sprawdzony, działający) skrypt php, ale i on się nie wykonuje. Plik ".htaccess" jest czytany bo jak w nim pomieszałem to wywalilo mi "Błąd nr. 500". Co robię nie tak?

0

Sprawdź, czy w httpd.conf masz dla adekwatnego katalogu AllowOverride All

httpd.conf napisał(a)
<directory /> Options FollowSymLinks AllowOverride All </directory>
0

W httpd.cof mam:

  1. First, we configure the "default" to be a very restrictive set of
  2. features.

<directory /> Options FollowSymLinks AllowOverride All </directory>

oraz:

  1. AllowOverride controls what directives may be placed in .htaccess files.
  2. It can be "All", "None", or any combination of the keywords:
  3. Options FileInfo AuthConfig Limit

AllowOverride All

Jakieś inne pomysły?


Pojęcia nie ma co się stało, ale... DZIAŁA. Pliki z download sie pobierają, a pliki w logs się inkrementują. Chodzi na moim lokalnym serwku, ciekawe czy jak puszcze w Świat to też będzie. Jeśli nie to wrócę tutaj. Jak na razie temat chyba zostaje zamknięty. Dzięki wielkie wszystkim za pomoc.

Dopisek.
A chyba wiem.
Zamiast "Rewriteengine on" spróbowałem "RewriteEngine on" bo PHP podobno rozróżnia wielkość liter i możliwe że to to. Zgadłem?

1 użytkowników online, w tym zalogowanych: 0, gości: 1