Aan de hand van het script van PHP Newbie heb ik het volgende geschreven voor mijn bestandsbeheer:

<?php
$dir = 'bestanden/'; //let op de / aan het eind

if(isset($_GET['download'])){
$sql = "SELECT
id,
naam
FROM
bestanden_new
WHERE
id = '".mysql_real_escape_string($_GET['bestand'])."'
";
$res = mysql_query($sql) or die (mysql_error());

if(mysql_num_rows($res) == 1){
$row = mysql_fetch_array($res);

$sql= "UPDATE
bestanden_new
SET
aantal = aantal +1
WHERE
id = '".mysql_real_escape_string($_GET['bestand'])."'
";
$res = mysql_query($sql) or die (mysql_error());

if(mysql_affected_rows()){
if(file_exists($dir.$row['naam'])) {
header('Content-type: Application/octet-stream'); //zet de header dat het bestand gedownload moet worden
//en dat het dus niet in de browser afgespeeld kan worden

header('Content-Disposition: attachment; filename='.$row['naam']); //geef aan welk bestand gedownload moet worden
readfile($dir.$row['naam']); //en open vervolgens dat bestand
}
else {
echo '<div id="error">Het bestand kon niet gevonden worden</div>';
}
}

}else{
header('location: admin_bestanden.php');
}
}
?>

Alleen elk bestand dat ik nu download is corrupt. Hoe kan dit? Hij weet dat het op de server staat, daarna gaat hij iets raars doen. Wanneer ik een MS Word document wil openen krijg ik gewoon mijn pagina met allemaal binaire data.

Wat gaat er bij mij mis?
Ik zou zeggen door deze regel:

header('Content-type: Application/octet-stream');


Daar moet gewoon de mimetype van het bestand staan.
Daar heb je een punt.

Ik heb nu het volgende:

<?php
if(file_exists('bestanden/'.$row['naam'])) {
//mime type ophalen
$mime = mime_content_type('bestanden/'.$row['naam']);
header('Content-type: '.$mime);

header('Content-Disposition: attachment; filename='.$row['naam']); //geef aan welk bestand gedownload moet worden
readfile('bestanden/'.$row['naam']); //en open vervolgens dat bestand
}
else {
echo '<div id="error">Het bestand kon niet gevonden worden</div>';
}

?>

Maar ook dit werkt nog niet naar behoren... Nog steeds hetzelfde probleem...
Misschien dat hier nog wat headers tussen zitten waar je wat aan hebt?
Ik kom er echt geen wijs uit. Ik heb nu van alles geprobeerd alleen wanneer ik een Word document probeer te downloaden lukt dit wel, alleen krijg ik eerste de pagina waar ik 'm download terug in mijn .doc document.

Dit is voor mij echt een raadsel, helemaal na de tips die jullie mij gegeven hebben.

Dit is wat ik tot nu toe heb

<?php
if(isset($_GET['download'])){
$sql = "SELECT
id,
naam
FROM
bestanden_new
WHERE
id = '".mysql_real_escape_string($_GET['download'])."'
";
$res = mysql_query($sql) or die (mysql_error());

if(mysql_num_rows($res) == 1){
$row = mysql_fetch_array($res);

$sql= "UPDATE
bestanden_new
SET
aantal = aantal +1
WHERE
id = '".mysql_real_escape_string($_GET['download'])."'
";
$res = mysql_query($sql) or die (mysql_error());

if(mysql_affected_rows()){

$map = $_SERVER['DOCUMENT_ROOT']."/bestanden/";
$path_parts = pathinfo($map);

if(file_exists($map.$row['naam'])) {
//mime type ophalen
$mime = mime_content_type($map.$row['naam']);

header("Content-type: ".$mime.""); // add here more headers for diff. extensions
header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\""); // use 'attachement' to force a download

header('Content-Disposition: attachment; filename=/bestanden/'.$row['naam']); //geef aan welk bestand gedownload moet worden
//readfile('bestanden/'.$row['naam']); //en open vervolgens dat bestand
}
else {
echo '<div id="error">Het bestand kon niet gevonden worden</div>';
}
}

}else{
header('location: admin_bestanden.php');
}
}
?>

Reageren