Ik heb op mijn site een systeem om alle bestanden in een map te echo'en, maar nu stuit ik op volgend probleem:
ik link gewoon naar word bestanden etc, maar deze worden dan geopent in IE zelf, wat wel vervelend is! Is er een mogelijkheid om via header te zorgen dat deze bestanden altijd worden gedownload (zo via een downloadvenstertje)? Is het trouwens ook mogelijk dan zelf te kiezen welke bestandsnaam deze bestanden moeten krijgen om te downloaden?
OK bedankt FangorN, die er niks om geeft om toch wel enkele leden op te jagen dankzij je net iets te directe & letterlijke replies. Ochja, zo mensen moeten er ook zijn...
Een methode hoe zou ook wel leuk zijn als je die zou vermelden
<?php
if(isset($_GET['download'])){
if(!strstr($_GET['download'], '..')){
$bestand = $_GET['download'];
if(file_exists($dir.$bestand)){
header("Content-Description: File Transfer");
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=".substr($bestand,6));
header("Content-Length: ".filesize($dir.$bestand));
@readfile($dir.$bestand);
}else{
header("Location: ".$_SERVER['REQUEST_URI']."&melding=Dit is een ongeldig bestand om te downloaden!");
}
}else{
header("Location: ".$_SERVER['REQUEST_URI']."&melding=Dit is een ongeldig bestand om te downloaden!");
}
}
?>
header("Location: ".$_SERVER['REQUEST_URI']."&melding=Dit is een ongeldig bestand om te downloaden!");
}
}else{
header("Location: ".$_SERVER['REQUEST_URI']."&melding=Dit is een ongeldig bestand om te downloaden!");
}
}
?>
Maar nu, als ik een bestand heb dat bvb 'sitemasters document.doc' heet, dan gaat ie als bestandsnaam om te downloaden geven: sitemasters. Hij neemt dus niets na de spatie...
hmmm, nog vreemder: als ik deze methode gebruik dan zijn de afbeeldingen die ik download blanco en in de excel documenten zit een kopie van de pagina van mijn site
Bij bestandsnaam komt er ook gewoon te staan: 'index'
<?php
if(isset($_GET['download'])){
echo "OK1";
if(!strstr($_GET['download'], '..')){
echo "OK2";
$bestand = $_GET['download'];
if(file_exists($dir.$bestand)){
echo "OK3";
header("Content-Description: File Transfer");
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=".$bestand."");
header("Content-Length: ".filesize($dir.$bestand));
readfile($dir.$bestand);
}else{
header("Location: index.php?Pagina=persoonlijke_bestanden&melding=Dit is een ongeldig bestand om te downloaden!");
}
}else{
header("Location: index.php?Pagina=persoonlijke_bestanden&melding=Dit is een ongeldig bestand om te downloaden!");
}
}
?>
header("Location: index.php?Pagina=persoonlijke_bestanden&melding=Dit is een ongeldig bestand om te downloaden!");
}
}else{
header("Location: index.php?Pagina=persoonlijke_bestanden&melding=Dit is een ongeldig bestand om te downloaden!");
}
}
?>
En als ik alle 4 de header regels weglaat (net onder OK3), dan werkt alles wel, er komt te staan: OK1OK2OK3, dus hij kan het bestand wel degelijk vinden!
Laat ik deze wel staan, dan krijg ik een mooi downloadvenstertje, maar als ik het bestand download en open krijg ik een fout van ongeldig bestand! En zo heb ik dat met word bestanden, excel files etc.
zorg ervoor dat er echt geen andere output is (laat ook spaties, enters weg, niet voor alle typen belangrijk maar sommige wel).
nu komt er dus ok1ok2ok3 voor te staan.
dat IE de doc opent, doet ie automatisch, zet er mss bij, om hem te misleiden^^, Content-type = application.
Hij is íets anders, maar ik ken hem niet meer uit m'n hoofd, zo denkt IE dat hij een toepassing download;-)
@prorsoft: nee, want in $dir staat al een "/" op't einde!
.zip werkt ook niet... En als ik het voorbeeld van php.net gebruik (stel dat het voor een pdf is)