Code前端首页关于Code前端联系我们

使用 PHP fputcsv 函数导出 CSV 文件

terry 2年前 (2023-09-30) 阅读数 44 #PHP
文章标签 PHP

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

1。选择要导出的数据

在开始编写导出 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;
}

2。导出 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函数将文件下载到本地。

3。导出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函数将标头和数据写入文件,关闭文件句柄并将文件下载到本地。

4。总结

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

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门