Téléchargement et de Téléchargement Php MySQL Script

J'ai fait de l'utilisation d'un script qui est disponible en ligne. Le Fichier upload.php permet à l'utilisateur de télécharger un fichier et enregistrer le fichier sélectionné dans la base de données MySQL. Plus tard, le download.php le script affiche les liens pour tous les fichiers stockés dans la base de données. Lorsque l'utilisateur clique sur le lien, le fichier doit être téléchargé. J'ai joint le script ci-dessous. Mais le problème c'est que quand je clique sur le lien, le contenu du fichier est affiché au lieu d'obtenir téléchargé.

upload.php

<!--
CREATE TABLE IF NOT EXISTS `upload` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
`type` varchar(30) NOT NULL,
`size` int(11) NOT NULL,
`content` longblob NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
-->
<html>
<head></head>
<body>
<form method="post" enctype="multipart/form-data">
<table width="350" border="0" cellpadding="1"
cellspacing="1" class="box">
<tr>
<td>please select a file</td></tr>
<tr>
<td>
<input type="hidden" name="MAX_FILE_SIZE"
value="16000000">
<input name="userfile" type="file" id="userfile"> 
</td>
<td width="80"><input name="upload"
type="submit" class="box" id="upload" value=" Upload "></td>
</tr>
</table>
</form>
</body>
</html>
<?php
if (isset($_POST['upload']) && $_FILES['userfile']['size'] > 0) {
$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];
$fileType = (get_magic_quotes_gpc() == 0 ? mysql_real_escape_string(
$_FILES['userfile']['type']) : mysql_real_escape_string(
stripslashes($_FILES['userfile'])));
$fp = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
fclose($fp);
if (!get_magic_quotes_gpc()) {
$fileName = addslashes($fileName);
}
$con = mysql_connect('localhost', 'root', 'root') or die(mysql_error());
$db = mysql_select_db('test', $con);
if ($db) {
$query = "INSERT INTO upload (name, size, type, content ) " .
"VALUES ('$fileName', '$fileSize', '$fileType', '$content')";
mysql_query($query) or die('Error, query failed');
mysql_close();
echo "<br>File $fileName uploaded<br>";
} else {
echo "file upload failed";
}
}
?>

Download.php

<html>
<head>
<title>Download File From MySQL Database</title>
<meta http-equiv="Content-Type" content="text/html; 
charset=iso-8859-1">
</head>
<body>
<?php
$con = mysql_connect('localhost', 'root', 'root') or die(mysql_error());
$db = mysql_select_db('test', $con);
$query = "SELECT id, name FROM upload";
$result = mysql_query($query) or die('Error, query failed');
if (mysql_num_rows($result) == 0) {
echo "Database is empty <br>";
} else {
while (list($id, $name) = mysql_fetch_array($result)) {
?>
<a href="download.php?id=<?php echo urlencode($id); ?>"
><?php echo urlencode($name); ?></a> <br>
<?php
}
}
mysql_close();
?>
</body>
</html>
<?php
if (isset($_GET['id'])) {
$con = mysql_connect('localhost', 'root', 'root') or die(mysql_error());
$db = mysql_select_db('test', $con);
$id = $_GET['id'];
$query = "SELECT name, type, size, content " .
"FROM upload WHERE id = '$id'";
$result = mysql_query($query) or die('Error, query failed');
list($name, $type, $size, $content) = mysql_fetch_array($result);
header("Content-length: $size");
header("Content-type: $type");
header("Content-Disposition: attachment; filename=$name");
ob_clean();
flush();
echo $content;
mysql_close();
exit;
}
?>
Essayez d'ajouter header('Content-Transfer-Encoding: binary'); header('Content-Description: File Transfer'); et aussi readfile($file); comme un exemple. Peut-être juste ajouter readfile($file); suffira. Nouveau $file est un exemple de variable. Pourtant, il plus probable réside avec vos en-têtes.
Et au lieu de header("Content-length: $size"); essayer header('Content-Length: ' . filesize($size));
Ni de vos suggestions aucun sens. Il n'y a pas de fichier, les données sont dans la base de données. Et l'argument filesize est un nom de fichier, $size est un nombre.
"Quand l'utilisateur clique sur le lien, le fichier doit être téléchargé. J'ai joint le script ci-dessous. Mais le problème c'est que quand je clique sur le lien, le contenu du fichier est affiché au lieu d'obtenir de téléchargement." @Barmar et je n'ai pas trouvé de $size, c'est l'OP de la variable.
Mais qu'entendez-vous par filesize($size)? $size est de la taille, pas un nom de fichier.

OriginalL'auteur | 2014-02-22