[php/mod_bandwidth]

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
Na eerst eindelijk een goede bandwidth-manager gevonden te hebben voor Apache die precies doet wat ik nodig heb (mod_bandwidth), blijkt nu dat het weer niet werkt i.c.m. met mijn download-script.

Wat is het verhaal: Ik heb een filemanager gemaakt met een downloadscript. Je weet wel, zoeen om downloads te registreren en hot-linken te voorkomen.

De bestanden hebben op harddisk een naam als "file_4f85c3" in een directory buiten de web-root. Het downloaden gaat via /getfile.php?id=4f85c3. In getfile.php staat uiteindelijk het volgende:
PHP:
1
2
3
4
header("content-length: $filelen");
header('Content-Disposition: attachment; filename="'.$basename.'"');
$fp=fopen($storename, "r");
fpassthru($fp);

Het probleem is echter dat mod_bandwidth wel de bestanden in dezelfde directory als getfile.php limiteerd, maar niet de te downloaden bestanden. Die komen dus op volle snelheid over.

Ik heb al geprobeerd om in een .htaccess-bestand of in httpd.conf de opslagdirectory hard in te stellen door "BandWidthModule On" en "BandWidth all 10240" te plaatsen, wat voor de directory van getfile.php wel voldoende is. Dit had echter geen enkel effect.

Wat moet ik doen om de data dat geproduceerd wordt door getfile.php (of fpassthru) netjes gelimiteerd te krijgen met mod_bandwidth?


Overigens is dit een leuke oplossing, maar ik doe het het liefst met mod_bandwidth:
Kees in "Met PHP downloadsnelheid aansturen"

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Acties:
  • 0 Henk 'm!

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 18-09 19:05
Ik heb geen idee hoe mod_bandwidth werkt aangezien ik hier niet over een Linux bak beschik (tja, Windows werkt voor mij goed en ik begrijp het ook nog ;))


Maar in de docs van mod_bandwidth hebben ze het regelmatig over een link dir. Misschien moet je daar iets invullen?

En ik zal ook eens kijken naar hoe fpassthru precies werkt...

Acties:
  • 0 Henk 'm!

  • usr-local-dick
  • Registratie: September 2001
  • Niet online
apache heeft de mod_bandwidth module, die regelt de bandwidth voor apache (duh).
apache heeft de php module, die regelt van alles, waaronder scripting, maar ook downloads.

Het gaat helaas niet lukken dus, aangezien PHP dingen buiten de mod_bandwitdh module om gaan.

Ik heb hetzelfde gehad met mod_proxy en mod_bandwidth. Alles wat via mod_proxy gaat komt niet meer langs mod_bandwidth. Dus de ge-proxyiede sites hebben gewoon full speed.

apache -> mod_bandwidth -> user
apache -> mod_php -> user
apache -> mod_proxy -> user

Dit is dus niet mogelijk:

apache -> mod_php -> mod_bandwidth -> user

[ Voor 17% gewijzigd door usr-local-dick op 04-11-2004 20:10 ]


Acties:
  • 0 Henk 'm!

  • real-doc
  • Registratie: Mei 2003
  • Niet online
Enige optie die je dan nog zou hebben is PHP als CGI draaien.

Acties:
  • 0 Henk 'm!

  • Kees
  • Registratie: Juni 1999
  • Laatst online: 19:57

Kees

Serveradmin / BOFH / DoC
of je limiteerd in de php file, staan wel oplossingen voor hoe dat moet in dit forum

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


Acties:
  • 0 Henk 'm!

  • angl2k
  • Registratie: Maart 2001
  • Laatst online: 17-12-2024
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php

$file = "test.mp3"; // file to be send to the client
$speed = 8.5; // 8,5 kb/s download rate limit

if(file_exists($file) && is_file($file)) {

   header("Cache-control: private");
   header("Content-Type: application/octet-stream"); 
   header("Content-Length: ".filesize($file));
   header("Content-Disposition: filename=$file" . "%20"); 

   flush();

   $fd = fopen($file, "r");
   while(!feof($fd)) {
         echo fread($fd, round($speed*1024));
       flush();
       sleep(1);
   }
   fclose ($fd);

}

?>


van de PHP manual

Acties:
  • 0 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
Bedankt voor jullie duidelijke gezamelijk antwoord!

usr-local-dick, nu snap ik waarom :)
Kees, jouw oplossing had ik zelfs nog gelinkt ;)
angl2k, bedankt voor de link!

Ik ga het dan dus inderdaad gewoon in php regelen, wat als voordeel heeft dat ik mezelf en andere logged-in users ongelimiteerd kan houden.

Thanks all!

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron

Pagina: 1