下载文件/ doc时出现PHP / SQL问题

时间:2017-09-01 09:15:18

标签: php mysql database blob

我的数据库中上传的文件存在一些问题。 我将我的文件(doc,img,...)上传到我的数据库中,看起来就是这样:

CREATE TABLE IF NOT EXISTS `pj` (
id bigint(20) NOT NULL AUTO_INCREMENT,
name varchar(30) NOT NULL,
type varchar(30) NOT NULL,
size int(11) NOT NULL,
content mediumblob NOT NULL,
id_demande int(100) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FK_pj_id_demande` (`id_demande`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

我使用这个PHP代码上传:

if($_FILES['userfile']['size'] > 0)
                    {
                    $fileName = $_FILES['userfile']['name'];
                    $tmpName  = $_FILES['userfile']['tmp_name'];
                    $fileSize = $_FILES['userfile']['size'];
                    $fileType = $_FILES['userfile']['type'];

                    $fp      = fopen($tmpName, 'r');
                    $content = fread($fp, filesize($tmpName));
                    $content = addslashes($content);
                    fclose($fp);

                    if(!get_magic_quotes_gpc())
                    {
                        $fileName = addslashes($fileName);
                    }

                    $query = "INSERT INTO pj (name, type, size, content, id_demande) VALUES ('$fileName', '$fileType', '$fileSize', '$content', $queryID)";
                    $resultQ =mysqli_query($con, $query);

                    }

下载后我用它:

$sqlPJ = "SELECT name, type, size, content FROM pj WHERE id_demande = 1";
    $queryPJ = $db->prepare($sqlPJ);
    $queryPJ->execute();
    $resultPJ = $queryPJ->fetchAll( PDO::FETCH_ASSOC );

    foreach($resultPJ as $rowPJ){
    $size = $rowPJ['size'];
    $type = $rowPJ['type'];
    $name = $rowPJ['name'];
    header("Content-length: $size");
    header("Content-type: $type");
    header("Content-Disposition: attachment; filename=$name");
    echo $rowPJ['content'];
    }

之后我的浏览器问我是否要用Office Word(它是一个doc文件)打开它,但其中的文本如下所示:

APEX_UTIL

我做错了什么?

PS:使用enter image description here来帮助我!

1 个答案:

答案 0 :(得分:0)

在恐惧中,改变' r'到了' rb'得到"二进制"模式。这样可以避免在Windows中破坏CR和LF。

进一步检查 - 查看文件和mediumblob中的字节数(使用LENGTH())。如果他们不匹配,那么事情仍然是错误的。