【发布时间】:2011-04-16 16:35:53
【问题描述】:
如何使用 PHP 将 PDF 文件存储在 MySQL 数据库中?
【问题讨论】:
-
因为我们不允许为用户上传 pdf..所以我们想将 pdf 存储在 db..我对此一无所知...
标签: php mysql binaryfiles
如何使用 PHP 将 PDF 文件存储在 MySQL 数据库中?
【问题讨论】:
标签: php mysql binaryfiles
使用 BLOB(二进制大对象)(longblob 数据类型)
$fileHandle = fopen($fileUpload, "r");
$fileContent = fread($fileHandle, $fileUpload_size);
$fileContent = addslashes($fileContent);
$dbQuery = "INSERT INTO myBlobs VALUES ";
$dbQuery .= "('$fileContent')";
完整教程可用here
但强烈建议将文件存储在文件系统上,只需在数据库中添加一个引用(包含文件路径和名称的字段)。几个原因:
【讨论】:
使用类型BLOB。
【讨论】:
正如其他人提到的,您可以使用 BLOB 类型。
另外,您还可以将 PDF 保存在文件系统中,并将其相关链接保存到数据库中。这与保存诸如缩略图和其他数据类型之类的内容相同的原则,这些内容可能对用户来说是唯一的并且在资源方面很昂贵。
【讨论】:
如果您只是想将上传的 PDF 文件存储在您的服务器上,更常见的做法是将该文件复制到具有唯一文件名的给定目录,然后将该文件的完整路径存储在您的 MySQL 表中。
如果您确实希望将文件的完整二进制数据存储在 MySQL 数据库中,那么您将需要做更多的工作来将二进制数据放入 MySQL 中的 BLOB 字段,然后将其转回以后再拉出来的文件。
您可能不仅要在 MySQL 表中存储文件的二进制数据,还要存储文件名、文件类型,甚至可能是文件的大小(用于在您的网页上列出)。您可能会想要一个表格,例如:
CREATE TABLE files (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
filename VARCHAR(128) NOT NULL,
mimetype VARCHAR(64) NOT NULL,
data MEDIUMBLOB NOT NULL
);
在你的 PHP 中,你可以插入一个上传的文件,如下所示;
$filePointer = fopen($_FILES['fileUpload']['tmp_name'], 'r');
$fileData = fread($filePointer, filesize($_FILES['fileUpload']['tmp_name']));
$fileData = addslashes($fileData);
$sql = "INSERT INTO files (filename, mimetype, data) VALUES( $fileName, $fileType, $fileData )";
再次取出文件需要一个专用脚本,该脚本选择适当的文件,然后使用一系列“标题”命令将该文件以浏览器知道如何处理的形式推送回浏览器.
您可以阅读有关此here 的完整教程。
【讨论】: