首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP从MySQL数据库下载损坏的文件

问使用PHP从MySQL数据库下载损坏的文件
EN

Stack Overflow用户
提问于 2015-01-15 17:37:39
回答 1查看 1.1K关注 0票数 0

每次我尝试下载时,它都会生成正确的文件名和扩展名(文件),但却损坏了(通常是1kb大小,无法打开,在这种情况下,我的文件是.docx格式,大小约为12kb )。我使用XAMPP,并使用phpmyadmin查看我的sql数据库。上传脚本用于将文件从计算机存储到数据库。

这是我的上传脚本:-根据答案编辑

代码语言:javascript
复制
<?php
session_start();
include("connect.php");
$nametemp=$_SESSION['name'];
$nistemp=$_SESSION['nislogin'];
$subjecttemp=$_SESSION['subject'];
$chapter=$_POST['chapter'];

$name=$_FILES['browsefile']['name'];
$mime=$_FILES['browsefile']['type'];
$data=file_get_contents($_FILES['browsefile']['tmp_name']);
$size=$_FILES['browsefile']['size'];

mysql_query("INSERT INTO assignment (name, mime, size, data, created, uploader, subject, chapter) VALUES ('$name', '$mime', '$size', '$data', NOW(), '$nametemp', '$subjecttemp', '$chapter')");

header("location:subject.php");
die();
?>

这是下载脚本:根据答案执行-edited

代码语言:javascript
复制
<?php
session_start();
include("connect.php");
$nametemp=$_SESSION['name'];
$nistemp=$_SESSION['nislogin'];
$classtemp=$_SESSION['class'];
$subjecttemp=$_SESSION['subject'];
$idtemp=$_GET['id'];

$query=("SELECT mime, name, size, data FROM assignment WHERE id='$idtemp'");
$result=mysql_query($query);
$filename=mysql_result($result,0,"name");
$filesize=mysql_result($result,0,"size");
$filemime=$type=mysql_result($result,0,"mime");
$filedata=mysql_result($result,0,"data");

header("Content-disposition: attachment; filename=$filename");
header("Content-length: $filesize");
header("Content-type: $filemime");
header("Content-transfer-encoding: binary");
echo $filedata;
?>

如果你想知道,下面是“assignment”表结构的截图:image

EN

回答 1

Stack Overflow用户

发布于 2015-01-15 17:45:49

$data=$_FILES‘’browsefile‘;

您将上载文件的临时名称分配给' data‘列,而不是数据本身。解决这个问题的捷径是使用file_get_contents函数。

第二: readfile从磁盘读取文件,它不提供来自变量的输出流。不需要这一行。

但是:不建议在数据库中保存二进制文件。最好将文件本身存储在一个上传文件夹中,并保存它的名称。

另外,更改下一行

代码语言:javascript
复制
mysql_query("INSERT INTO assignment (name, mime, size, data, created, uploader, subject, chapter) VALUES ('$name', '$mime', '$size', '$data', NOW(), '$nametemp', '$subjecttemp', '$chapter')");

转到

代码语言:javascript
复制
mysql_query("INSERT INTO assignment (name, mime, size, data, created, uploader, subject, chapter) VALUES ('$name', '$mime', '$size', '" . mysql_real_escape_string($data) . "', NOW(), '$nametemp', '$subjecttemp', '$chapter')");

接下来:请考虑更改为PDO,而不是使用旧的Mysql_*函数(它们已被弃用)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27960478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档