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
Et au lieu de
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
"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
Mais qu'entendez-vous par
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
Vous devez vous connecter pour publier un commentaire.
download.php
affiche tout le code HTML en haut, même lorsque l'utilisateur a sélectionné un fichier à télécharger. Vous avez besoin de mettre l'intégralité de l'article dans unif
afin de ne pas se mettre au début du téléchargement:Je vais certainement +1. Je suppose que je n'ai mal comprendre la question, après tout. Bon spectacle Barmar.
OriginalL'auteur Barmar