[PHP] Header output vanaf remote server bandbreedte probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Fietslamp398
  • Registratie: April 2003
  • Laatst online: 05-04 23:11
Ik heb een maand geleden een site gemaakt voor een vriend waarmee je een deel van zijn album op mp3 alvast als test kan downloaden.

Om bandbreedte te sparen, heb ik meerdere servers waar alle nummers op staan. Als je op een mp3 klikt worden er een aantal dingen gedaan zoals een teller etc. Daarnaast wordt er 1 van de servers gekozen. Omdat ik wil dat de bezoeker de nummers download en niet in de browser luistert wordt de code in force.php aangeroepen.

Dit is de code van force.php:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php

$final_download = $_GET['download'];

$file = basename ($final_download);
$file_extension = strtolower(substr(strrchr($file,"."),1));

   switch( $file_extension ) {
         
     case "mp3": $ctype="audio/mpeg"; break;  
     case "pdf": 
     case "exe": 
     case "zip": 
     case "doc":
     case "xls": 
     case "ppt": 
     case "gif": 
     case "png": 
     case "jpeg":
     case "jpg": 
     case "wav": 
     case "mpeg":
     case "mpg":
     case "mpe": 
     case "mov": 
     case "avi": 
     case "php":
     case "htm":
     case "html":
     case "txt": die("<b>Alleen mp3s kunnen gedownload worden....!</b>"); break;

     default: $ctype="audio/mpeg";
   }

header("Pragma: public"); 
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); 
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".basename($final_download)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($final_download));
readfile("$final_download");

?>


Maar nu ik de bandbreedte logs bekijk blijkt dat deze (werkende) methode me toch veel bandbreedte kost op de server waarop de site staat... Daarnaast kost het ook bandbreedte op de andere server.

Ik dacht eerst dat het aan de cache control lag en heb een deel van de code vervangen door:
PHP:
1
2
3
4
5
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

Maar helaas lijkt een mp3 nog steeds van de 'mirror-server' via de site server naar de bezoeker te gaan. Dit kost dus 2 maal bandbreedte :)

Ik ben (helaas) geen expert op dit vlak van php, dus nu is mijn vraag:

Is het zo dat deze methode(s) de mp3 via mijn 'site server' naar de gebruiker stuurt? en zoja: is dit te omzeilen?

Signatures zijn voor mietjes!


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Als je readfile gebruikt wordt het eerst van de ene server naar de andere gedownload, en vervolgens van die server naar de gebruiker. Elke file download je dus twee keer. Niet erg zinnig dus. ;)

Je kan wel een redirect-header sturen die de gebruiker doorstuurt naar de goeie server.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Of je kan je force.php scriptje op elke server zetten zodat het overal lokaal ingelezen wordt en dan redirecten naar force.php.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

offtopic:
Dit moet trouwens ook even gezegd worden: die switch met tig cases ziet er erg ranzig uit. Er zijn maar twee condities, dus een gewone if/else in combinatie met in_array zou een stuk netter zijn.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

offtopic:
In dit geval zou ik de switch wel behouden ivm mogelijke latere uitbreiding, maar dan niet iedere extensie apart op gaan schrijven en die gewoon in de default: laten. Enkel de extensies waar iets achter zit gebruiken als case.