您的位置:

使用 PHP fputcsv 函数导出 CSV 文件

CSV(Comma Separated Values)即逗号分隔值,是一种常用的文件格式,常用于将数据从一个程序导出到另一个程序中。在 PHP 中,我们可以使用 fputcsv 函数将数组数据导出为 CSV 文件格式。

一、选择要导出的数据

在开始编写导出 CSV 文件的代码前,我们需要确定要导出的数据。一般来说,我们需要从数据库中查询出需要导出的数据,并将其存储为数组。在本例中,我们将以一个示例数据库表为例。

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `phone` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
);

INSERT INTO `users` (`name`, `email`, `phone`) VALUES
('John Doe', 'john@example.com', '123456789'),
('Jane Smith', 'jane@example.com', '987654321');

我们可以使用以下代码从数据库中查询出需要导出的数据,并将其存储为数组:

// 连接数据库
$db = new mysqli('localhost', 'username', 'password', 'database');

// 查询需要导出的数据
$result = $db->query("SELECT * FROM users");
$data = array();
while ($row = $result->fetch_assoc()) {
    $data[] = $row;
}

二、导出 CSV 文件

在从数据库中查询出需要导出的数据并将其存储为数组之后,我们可以开始编写代码来将这些数据导出为 CSV 文件。

我们将使用 fputcsv 函数将数据写入 CSV 文件中。fputcsv 函数将数组作为参数,并将其转换为逗号分隔的字符串。然后,它将字符串写入文件中。

以下是一个完整的示例代码,该代码将查询出数据库表中的所有数据,并将其导出为 CSV 文件:

// 连接数据库
$db = new mysqli('localhost', 'username', 'password', 'database');

// 查询需要导出的数据
$result = $db->query("SELECT * FROM users");
$data = array();
while ($row = $result->fetch_assoc()) {
    $data[] = $row;
}

// 导出 CSV 文件
$filename = 'users.csv';

// 打开文件句柄
$handle = fopen($filename, 'w');

// 将表头写入文件
fputcsv($handle, array_keys($data[0]));

// 将数据写入文件
foreach ($data as $row) {
    fputcsv($handle, $row);
}

// 关闭文件句柄
fclose($handle);

// 文件下载
header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename="' . $filename . '";');
readfile($filename);

在上面的代码中,我们首先将数据查询出来,并存储为 $data 数组,然后将文件名设置为 users.csv。

接着,我们使用 fopen 函数打开文件句柄,并使用 fputcsv 函数写入表头(数组的键值)。

使用 foreach 循环,将每一行数据写入文件中。在每一次写入时,使用 fputcsv 函数将数据转换为 CSV 格式,并写入文件。

最后,我们使用 fclose 函数关闭文件句柄,并使用 header 和 readfile 函数将文件下载到本地。

三、导出中文字符集 CSV 文件

在导出 CSV 文件时,如果数据中包含中文字符集,我们需要对字符编码进行特殊处理。

首先,我们需要将字符编码从默认的 ANSI 编码转换为 UTF-8 编码。我们可以使用以下代码来转换编码:

foreach ($data as &$row) {
    foreach ($row as &$cell) {
        $cell = iconv('GB2312', 'UTF-8', $cell);
    }
}
unset($row, $cell);

这段代码使用 iconv 函数将 GB2312 编码的字符转换为 UTF-8 编码,其中 $data 是从数据库中查询出的数据数组。

然后,我们需要将编码后的数据导出为 CSV 文件。导出过程与前面相同,只需在 fputcsv 函数前加上添加 BOM(Byte Order Mark)头即可:

// 打开文件句柄
$handle = fopen($filename, 'w');

// 添加 BOM 头
fwrite($handle, "\xEF\xBB\xBF");

// 将表头写入文件
fputcsv($handle, array_keys($data[0]));

// 将数据写入文件
foreach ($data as $row) {
    fputcsv($handle, $row);
}

// 关闭文件句柄
fclose($handle);

// 文件下载
header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename="' . $filename . '";');
readfile($filename);

在上面的代码中,我们使用 fwrite 函数在文件最前面添加 BOM 头,该头部告诉程序文件使用 UTF-8 编码。然后,我们使用 fputcsv 函数将表头和数据写入文件中,关闭文件句柄后将文件下载到本地。

四、总结

本文详细介绍了使用 PHP 的 fputcsv 函数导出 CSV 文件的方法。首先,我们从数据库中查询出需要导出的数据并将其存储为数组。然后,我们使用 fputcsv 函数将数据导出为 CSV 文件,并将其下载到本地。最后,我们讲述了如何导出中文字符集数据。