Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Licznik download on-line pokazujący co aktualnie jest pobierane
Forum PHP.pl > Forum > PHP
slawekxx
Szukam skryptu licznika download , który pokazuje jakie aktualne pliki są pobierane, ewentualnie jak taki skrypt można napisać ?
vokiel
Linki do pobierania nie są linkami kierującymi bezpośrednio do danego pliku, tylko do skryptu.
Do tego skryptu podajesz nazwę pliku.
Skrypt uaktualnia w bazie licznik dla danego pliku. Dodaje znacznik czasu rozpoczęcia pobierania.
Odczytuje go z dysku i wysyła do klienta.
Na zakończenie pobierania uaktualnia znacznik czasu w bazie informujący o zakończeniu pobierania.

Pobrać listę aktualnie ściąganych jest bardzo prosto. Pobierasz te dla których nie ma czasu zakończenia. Przy tym możesz pobrać czas rozpoczęcia, wielkość pliku i wyliczyć prędkość pobierania, przewidywany czas itd.
slawekxx
Tylko ,że pliki mam na serwerze usługodawcy Hostingu jak się mam wziąć za napisanie tego skryptu ?
vokiel
No i na serwerze usługodawcy hostingu stawiasz skrypt. W końcu pliki będą wysyłane z serwera to i tam powinno następować liczenie pobrań.
slawekxx
a możesz mi podać jakieś linki do podobnych rozwiązań
vokiel
Jest tego ogrom, nawet tu na forum, a w google to już całkiem.
slawekxx
Co do samego licznika to już taki mam i działa zlicza mi kliknięcia w dany link(plik) , nie wiem tylko jak mam napisać te parę linijek kodu a dokładniej,

1. jak dodać znacznik czasu rozpoczęcia pobierania
2. Odczytuje go z dysku i wysyła do klienta
3. Na zakończenie pobierania uaktualnia znacznik czasu w bazie informujący o zakończeniu pobierania

to o czym pisałeś na wstępie.

Kod mojego licznika składa się z trzech plików config.php to połączenie z bazą, plik counter.php to
  1.  
  2. //1. include the configuration file
  3. include("config.php");
  4.  
  5. //2. Get the id from the url and store it into a variable
  6. $id = mysqli_real_escape_string($link, $_GET['id']);
  7.  
  8. //3. fetch the url and clicks from this banner
  9. $clicks = mysqli_fetch_object(mysqli_query($link, "SELECT image,hd, download FROM wp_my_plugin WHERE id=".$id.""));
  10.  
  11. //4. increase clicks with 1
  12. $new_click = $clicks->download+1;
  13.  
  14. //5. update this into the database, check if it was succesfull
  15. if(mysqli_query($link, "UPDATE wp_my_plugin SET up_post_date=NOW(), download=".$new_click." WHERE id=".$id."")):
  16. //6. redirect to the url
  17. header("Location: ".$clicks->hd);
  18. else:
  19. //6. else write to error log
  20. endif;


trzeci plik index.php to
  1. <?php
  2. include("config.php");
  3. //popular_video
  4. $sql = mysqli_query($link, "SELECT id,image,post_date,MAX(download), title FROM wp_my_plugin GROUP BY post_date DESC LIMIT 10");
  5. //new_video
  6. //$sql = mysqli_query($link, "SELECT id,image,up_post_date,title FROM wp_my_plugin GROUP BY up_post_date DESC LIMIT 10");
  7.  
  8. //
  9. ?>
  10. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  11. <html xmlns="http://www.w3.org/1999/xhtml">
  12. <head>
  13. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  14. <title>banners index page</title>
  15. <script type="text/javascript" src="js/jquery-1.6.1.min.js"></script>
  16. <script type="text/javascript" src="js/jquery.waterwheelCarousel.min.js"></script>
  17. <link rel="stylesheet" type="text/css" href="css/waterwheel-carousel.css" />
  18.  
  19.  
  20. <script type="text/javascript">
  21. $(document).ready(function () {
  22. $("#waterwheel-carousel-vertical").waterwheelCarousel({
  23. orientation: 'vertical',
  24. startingItemSeparation: 100,
  25. startingWaveSeparation: 40,
  26. autoPlay: 2500
  27. });
  28.  
  29. });
  30. </script>
  31.  
  32.  
  33.  
  34. </head>
  35. <body>
  36. <div id="waterwheel-carousel-vertical">
  37. <div class="carousel-controls">
  38. <div class="carousel-prev"><a href="#">&lt; move down</a></div>
  39. <div class="carousel-next"><a href="#">&gt; move up</a></div>
  40. </div>
  41. <div class="carousel-images">
  42.  
  43. <?php
  44. while($result = mysqli_fetch_object($sql)):
  45. ?>
  46.  
  47. <a href="counter.php?id=<?php echo $result->id; ?>">
  48. <img src="<?php echo $result->image; ?>" alt="<?php echo $result->title; ?>" width="138" height="82"/>
  49. </a>
  50.  
  51. <?php
  52. endwhile;
  53. ?>
  54. </div> </div></div><!-- end of container -->
  55.  
  56.  
  57. </ul>
  58.  
  59. </div>
  60. </body>
  61. </html>
  62.  
vokiel
Nie wiem co masz zapisane w bazie, ale pewnie ścieżkę do pliku. Żeby wysłać plik do klienta nie przekierowując na niego trzeba ten plik w skrypcie odczytać i wysłać. W taki sposób możesz kontrolować status wysyłania i stwierdzić moment jego ukończenia.
Czyli zamiast
  1. header("Location: ".$clicks->hd);


Możesz odczytać plik na raz i go przesłać (jeśli jest mały), coś a'la:
  1. $fd=fopen($clicks->hd,"r");
  2. $size=filesize($clicks->hd);
  3. $contents=fread($fd.$size);
  4. fclose($fd);
  5.  
  6. header("Content-Type: application/octet-stream");
  7. header("Content-Length: $size: ");
  8. header("Content-Disposition: attachment; filename=Nazwa_ktora_widzi_klient");
  9. echo $contents;
Wtedy użytkownik widzi rozmiar pobieranego pliku.

Lub odczytywać w części i te części wysyłać, lepsze dla dużych plików:
  1. $fd=fopen($clicks->hd,"r");
  2. // nagłówki do przeglądarki
  3. while (!feof($fd)){
  4. echo fread($fd, 1024);
  5. // tu można sprawdzać czy zwraca string'a czy FALSE
  6. }

Przejrzyj dokładnie manuala do fread, w komentarzach jest sporo przydatnych snippetów.

Popatrz tu na forum
slawekxx
chcę stworzyć galerię miniatur, które są odnośnikami do linków video galerii w tym przypadku "obecnie oglądanych " raczej nie bez pobierania
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.