Een bestand downloaden
Code (php)
Dit werkt overigens perfect.
Maar ga ik nu zoeken op internet, kom ik eigenlijk alleen maar het volgende tegen:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
header ('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header ('Content-Description: File Transfer');
header ('Content-Type: application/octet-stream');
header ('Content-Length: ' . filesize($web_adres));
header ('Content-Disposition: attachment; filename=' . basename($sName));
readfile($web_adres);
?>
header ('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header ('Content-Description: File Transfer');
header ('Content-Type: application/octet-stream');
header ('Content-Length: ' . filesize($web_adres));
header ('Content-Disposition: attachment; filename=' . basename($sName));
readfile($web_adres);
?>
Is deze laatst genoemde code beter om te gebruiken of maakt het in wezen niet veel uit?
Gewijzigd op 25/02/2016 18:06:11 door Sandertje -
In beiden zit verschil. De eerste is een doorverwijzing naar een door jouw aangegeven URL, en de laatste is een geforceerde download.
Wat is het voordeel van een geforceerde download?
Maar bij een geforceerde download maakt het niet uit wat voor bestand het is en download het meteen.
De gebruiker kan dan de file niet rechtstreeks downloaden. Hij moet bijvoorbeeld ingelogd zijn.
met
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
if(isIngelogd()) {
header ('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header ('Content-Description: File Transfer');
header ('Content-Type: application/octet-stream');
header ('Content-Length: ' . filesize($web_adres));
header ('Content-Disposition: attachment; filename=' . basename($sName));
readfile($web_adres);
}
else {
echo 'eerst graag inloggen';
}
?>
if(isIngelogd()) {
header ('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header ('Content-Description: File Transfer');
header ('Content-Type: application/octet-stream');
header ('Content-Length: ' . filesize($web_adres));
header ('Content-Disposition: attachment; filename=' . basename($sName));
readfile($web_adres);
}
else {
echo 'eerst graag inloggen';
}
?>
Bij de eerste versie (location:) weet de gebruiker na de eerste keer waar de file staat en hoe hij heet. Hij zal hem dus ook kunnen benaderen zonder ingelogd te zijn, of de url met iedereen delen.
Maar hoe betrouwbaar is het gebruik van een geforceerde download? Kunnen alle browsers hier wel mee overweg? Ik meen wel eens gelezen te hebben dat sommige browsers moeite met het script kunnen hebben.
Ik zou niet weten welke browser er tegenwoordig nog problemen mee zal hebben.