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:
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:
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?
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!