Ik ben een soort van ledensysteem aan het ontwikkelen. Daarin moeten gebruikers toegang hebben tot speciaal voor hen gecreëerde bestanden. Wat is de beste manier om dit via PHP en MariaDB te doen? Ik heb toegang tot veel andere soorten scripttalen, als dat nodig is, maar ik ken zelf alleen basis Python...
Hoe werken die headers eigenlijk? Gewoon ter vervollediging van de vraag, hoe kan ik zeggen aan de browser dat hij de PDF-reader moet openen i.p.v.p een download box?
Je kan niet zeggen open de PDF reader, je kan alleen zeggen "hey dit is een PDF bestand", en dat doe je door het juiste mimetype door te geven, ofwel application/pdf.
Je kunt de browser gelukkig geen instructies geven om externe programma's te openen, daar zouden veiligheidsrisico's aan kleven.
Elk bestand wat je opvraagt via de browser, wat meestal via het HTTP protocol gebeurt, identificeert zijn bestandstype via de Content-Type header (waarmee je in feite een MIME-type instelt, zoals @Ben aangeeft). Vervolgens controleert de browser of deze het bestandstype verder af kan handelen.
Indien de browser een PDF-plugin heeft en er een PDF-document wordt opgevraagd (en dit document ook als zodanig geserveerd wordt, je zou een PDF-document ook als een anoniem bestandstype kunnen serveren als application/octet-stream, maar misschien is de browser alsnog slim genoeg om uit te vogelen dat dit een PDF-bestand is) dan zal deze direct inline worden weergegeven, tenzij je je browser of plugin zo geconfigureerd hebt dat er iets anders moet gebeuren (bijvoorbeeld dat het bestand eerst lokaal opgeslagen zou moeten worden ofzo).
Dat is voor een geforceerde download-popup. En daar heb je geen application/pdf voor nodig, maar een application/octet-stream.
We waren al in de buurt. Alleen de readfile() met de header('Content-Type: application/pdf'), en je bent er.
Wel zou ik dan alsnog wel file_exists() gebruiken om te kijken of het bestand bestaat.
<?php
$bestand = 'bestand.pdf';
if(file_exists($bestand)) {
header('Content-Type: application/pdf');
readfile($bestand);
exit;
} else {
echo "Het bestand dat werd opgevraagd bestaat niet, of er is een onverwachte fout opgetreden.";
}
?>
Oké. Dat werkt volledig.
Daarbij is dit topic volledig opgelost! Dank jullie wel voor alle erg goede commentaren.
Misschien wel nog dit:
Als de browser geen PDF-plugin heeft, zal deze dan op de computer kijken of die daar een bestand kan vinden?
En nog een vraagje daarbij aansluitend: als de browser kijkt voor een programma, en het kan niets vinden... wat doet het dan? Geeft het dan het download venster weer??