Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Ilość plików pobieranych jednoczesnie
radmistrz2
post
Post #1





Grupa: Zarejestrowani
Postów: 143
Pomógł: 4
Dołączył: 2.03.2008

Ostrzeżenie: (10%)
X----


Witam. Czy można jakoś sprawdzić z poziomu php ile plików użytkownik o x ip pobiera w danym momencie? Chcę ograniczyć ilość pobieranych plików aby ludzie nie zaczynali ściągać 10 plików po 100 mega jeśli zostało im 150 MB transferu - transfer odejmuje dopiero po zakończeniu pobierania. Może jest jakiś jeszcze inny sposób na to aby nie dać się oszukać??
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
marcio
post
Post #2





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Ja sie na tym nie znam ale gdybys np robil update transferu(nie wiem masz go w bazie czy cos) za pomoca ajax'a?

Lub poprostu za kazdym sciagnietym plikiem sprawdzasz ile transferu zostalo porownywal go z wielkoscia nastepnego pliku do sciagniecia jesli jest wiecej to sciagasz jesli nie to konczysz download.

Nie chce powiedziec zadnej herezji ale akurat nigdy nie rozwiazywalem takiego problemu.



--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
artega
post
Post #3





Grupa: Zarejestrowani
Postów: 174
Pomógł: 42
Dołączył: 22.07.2007
Skąd: /dev/random

Ostrzeżenie: (0%)
-----


Dostosuj poniższy skrypt do własnych potrzeb
  1. <?php
  2.  
  3. $speed = 100;
  4.  
  5. $bufsize = 2048;
  6.  
  7. $packet = 1;
  8.  
  9. $bandwidth = 0;
  10.  
  11. $file = "/home/file.tgz";
  12.  
  13. $lock = '/tmp/'.$_SERVER['REMOTE_ADDR'].'_'.md5($file).'.lock';
  14.  
  15. if (file_exists($lock))
  16. {
  17. echo "Concurrent downloading is disallowed";
  18. exit();
  19. }
  20.  
  21. $size = filesize($file);
  22.  
  23. $fp = fopen($file, 'rb');
  24.  
  25. touch($lock);
  26.  
  27. while (!(connection_aborted() || connection_status() == 1) && $size > 0)
  28. {
  29. if ($size < $bufsize)
  30. {
  31. echo fread($fp, $size);
  32.  
  33. $bandwidth += $size;
  34. }
  35. else
  36. {
  37. echo fread($fp , $bufsize);
  38.  
  39. $bandwidth += $bufsize;
  40. }
  41.  
  42. $size -= $bufsize;
  43.  
  44. flush();
  45.  
  46. if ($speed > 0 && ($bandwidth > $speed * $packet * 1024))
  47. {
  48. sleep(1);
  49. $packet++;
  50. }
  51. }
  52.  
  53. unlink($lock);
  54.  
  55. fclose($fp);
  56.  
  57. ?>

Aby sprawdzić ile plików jest pobieranych w danej chwili wystarczy:
  1. <?php
  2. echo count(glob('/tmp/'.$_SERVER['REMOTE_ADDR'].'_*.lock'));
  3. ?>

Wypadałoby też zabezpieczyć się przed martwymi kluczami wskazywanymi przez zmienną $lock sprawdzając czas ostatniego dostępu.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 15:58