Beveiligde download, ouput weergeven voor download begint
function SendFile($FileName)
{
header("Content-Type: application/octet-stream");
header("Content-Length: " . filesize($FileName));
header("Content-Disposition: attachment; filename=\"$FileName\"");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
$fp = fopen($FileName,"rb");
fpassthru($fp);
fclose($fp);
}
Deze pas ik als volgt toe op de pagina (meeste code weggelaten voor de duidelijkhed):
echo "Het bestand wordt gedownload, je kent het openen zo gauw het downloaden is voltooid. Ondertussen kun je gewoon verder kijken op de site, zolang je het download venster maar niet afsluit.";
SendFile($FileName);
//hier nog meer output die moet worden weergegeven
Probleem hiermee is dat de tekst die ik probeer te "echo-en" niet wordt weergegeven. Dit komt denk ik omdat de functie sendfile nog actief is, waardoor de output nog niet naar de browser wordt gestuurd. Ook moet er eigenlijk na de functie sendfile nog output worden weergegeven.
Hoe krijg ik het dus voor elkaar om dat bestand beveiligd te versturen naar de bezoeker, maar ondertussen toch mijn pagina gewoon goed weer te geven??
Ik heb geprobeerd om met flush en ob_flush te werken, voordat de functie sendfile wordt aangeroepen, maar dan werkt het downoaden van het bestand niet meer omdat de sendfile functie headers gebruikt, terwijl deze dan al zijn verstuurd (krijg dus die bijbehorende foutmelding dan: headers already sent).
Iemand een oplossing?
Dit wordt doorgaans gedaan door: In eerste instantie slechts de boodschap laten zien, en refreshen/redirecten na een paar seconden naar de url waar je het direct kan downloaden.
Min of meer deze opzet.
De manier van bestand versturen is dus op zich wel de meeste optimale manier? Ik had die functie namelijk ff via Google gezocht, aangezien ik hier geen ervaring mee had
thanx
Maar qua opzet is het buiten de directory zetten en het php laten doorsturen wel de juiste oplossing om je bestanden te beveiligen.