Werken met bestanden in een ledensysteem
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.
is dat dan met de header-functie? dus zo:
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).
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).
Dus dit is dan het juiste? Bron: PHP Reference
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$file = 'monkey.gif';
if(file_exists($file))
{
header('Content-Description: File Transfer');
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: '.filesize($file));
readfile($file);
exit;
}
?>
$file = 'monkey.gif';
if(file_exists($file))
{
header('Content-Description: File Transfer');
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: '.filesize($file));
readfile($file);
exit;
}
?>
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.
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.
Gewijzigd op 07/08/2017 15:14:19 door - Ariën -
Het ziet er wel goed uit. Probeer het eens uit.
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??
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??
Als de browser geen PDF-plugin heeft, dan wordt er gekeken of er een ander programma geinstalleerd is die overweg kan met PDF's. En als die er niet is, volgt er een foutmelding.
Daarom raad ik een geforceerde download aan. Daarin kan de gebruiker in het dialoog-venter zelf kiezen waarin hij het bestand wilt openen, en anders zelf het bestand op wilt slaan op een eigen locatie. Dit kan bijvoorbeeld een USB-stick zijn als hij het op een andere computer wilt bekijken, waar hij wel de mogelijkheden heeft. Dit type zie ik bijna altijd op websites waar ik administratieve overzichten kan downloaden.
Daarom raad ik een geforceerde download aan. Daarin kan de gebruiker in het dialoog-venter zelf kiezen waarin hij het bestand wilt openen, en anders zelf het bestand op wilt slaan op een eigen locatie. Dit kan bijvoorbeeld een USB-stick zijn als hij het op een andere computer wilt bekijken, waar hij wel de mogelijkheden heeft. Dit type zie ik bijna altijd op websites waar ik administratieve overzichten kan downloaden.
Gewijzigd op 07/08/2017 17:09:32 door - Ariën -
>> Als de browser geen PDF-plugin heeft, dan wordt er gekeken of er een ander programma geinstalleerd is die overweg kan met PDF's. En als die er niet is, volgt er een foutmelding.
Volgens mij klopt dat niet. Wanneer er geen plugin aanwezig is wordt het effectief een geforceerde download.
Volgens mij klopt dat niet. Wanneer er geen plugin aanwezig is wordt het effectief een geforceerde download.
Hoi allemaal.
Bij mij wordt er geregeld een PDF geopend in het programma zelf, als ik via Internet Explorer ga.
Ik ga zien wat ik precies ga gebruiken. Waarschijnlijk wordt het een geforceerde download, maar wilde het ook vooral weten voor de kennis. Of misschien gebruik ik het samen...
Bedankt iedereen.
Bij mij wordt er geregeld een PDF geopend in het programma zelf, als ik via Internet Explorer ga.
Ik ga zien wat ik precies ga gebruiken. Waarschijnlijk wordt het een geforceerde download, maar wilde het ook vooral weten voor de kennis. Of misschien gebruik ik het samen...
Bedankt iedereen.




