php 上传文件数据库 (问:有关php如何上传文件到数据库?)
PHP 作为一种广泛应用于 Web 开发的编程语言,常常需要处理文件上传等功能,尤其是在需要保存上传文件的服务器空间不足、压缩包中的文件需要进行解压、前端需要对上传文件进行预览等场景下,上传文件到数据库成为了一种更为灵活、安全和可靠的选择。本文将介绍如何利用 PHP 技术实现文件上传到数据库中的功能。
- 创建数据库和数据表
首先我们需要有一个 MySQL 数据库,并在其中创建一个数据表,用于存储上传的文件数据。示例代码如下:
sql
CREATE TABLE `files` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`type` VARCHAR(50) NOT NULL,
`size` INT(11) NOT NULL,
`data` LONGBLOB NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 编写表单页面
在 HTML 页面中,我们需要创建一个表单用于文件上传,示例代码如下:
“`html
“`
由于文件上传需要使用 POST 方法和数据编码类型 enctype 为 multipart/form-data,因此上述代码中设置了这两个属性。同时,表单中也包含了一个用于上传文件的 input 标签。
- 编写 PHP 代码
下面我们需要编写 PHP 代码,实现将上传的文件保存到数据库。示例代码如下:
“`php
<?php
if ($SERVER[‘REQUESTMETHOD’] === ‘POST’) {
$file = $FILES[‘file’];
if (isuploadedfile($file[‘tmpname’])) {
$name = basename($file[‘name’]);
$type = $file[‘type’];
$size = $file[‘size’];
$data = filegetcontents($file[‘tmp_name’]);
$dsn = 'mysql:host=localhost;dbname=<your_database_name>;charset=utf8';
$username = '<your_username>';
$password = '<your_password>';
$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
$pdo = new PDO($dsn, $username, $password, $options);
$stmt = $pdo->prepare('INSERT INTO files(name, type, size, data) VALUES(?, ?, ?, ?)');
$stmt->execute(array($name, $type, $size, $data));
}
}
?>
“`
上述 PHP 代码中,首先判断请求方法是否为 POST;接着获取上传的文件信息,并将其保存到服务器的临时目录中;然后分别获取文件的原始名称、MIME 类型、大小和内容,并使用 PDO 扩展将这些信息插入到数据库中。其中的数据源名称(DSN)、用户名(username)和密码(password)需要根据实际情况进行修改。
- 下载文件
最后,我们还需要实现从数据库中下载文件的功能。示例代码如下:
“`php
<?php
$id = $_GET['id'];
$dsn = ‘mysql:host=localhost;dbname=;charset=utf8’;
$username = ”;
$password = ”;
$options = array(
PDO::ATTRERRMODE => PDO::ERRMODEEXCEPTION
);
$pdo = new PDO($dsn, $username, $password, $options);
$stmt = $pdo->prepare(‘SELECT name, type, size, data FROM files WHERE id = ?’);
$stmt->execute(array($id));
$row = $stmt->fetch();
if ($row) {
$name = $row[‘name’];
$type = $row[‘type’];
$size = $row[‘size’];
$data = $row[‘data’];
header(“Content-Disposition: attachment; filename=\””.$name.”\””);
header(“Content-Type: “.$type);
header(“Content-Length: “.$size);
echo $data;
}
?>
“`
上述 PHP 代码中,通过 GET 方法获取文件 ID,并使用 PDO 扩展从数据库中查找对应的文件信息。如果找到了,则从该文件记录中获取文件名、MIME 类型、大小和内容,并使用 header 函数将这些信息写入到响应头中,最后将文件内容输出到客户端,实现文件下载的功能。
总结:本文介绍了如何使用 PHP 技术将上传的文件保存到数据库中,并实现了从数据库中下载文件的功能。这种方式相对于文件保存到服务器的文件系统中,更为灵活、安全和可靠。但需要注意的是,将大量大文件保存到数据库中可能会影响数据库性能,因此应该根据实际情况进行选择。