我有一个内置到 WordPress 网站管理部分的 Web 界面。它会在我的数据库中抓取一些表,然后逐行显示一个大数据列表。该数据大约有 30,000 行,在 for 循环中以基本回显形式显示。在页面上显示所有 30,000 行工作正常。
此外,我还包括一个下载完整数据行的 CSV 文件的选项。我使用fopen
然后fputcsv
从数据查询的结果中构建 CSV 文件以供下载。此功能曾经有效,但现在数据集为 30,000,CSV 将不再正确生成。发生的情况是前 200~1000 行将被写入 CSV 文件,而忽略了大部分数据。我估计在我的情况下未正确生成的 CSV 大约为 10 兆。然后文件将下载前 200~1000 行,就好像一切正常。
这是代码:
// This gets a huge list of data from a SP I built. This data is well formed
$data = $this->run_stats_stored_procedure($job_to_report);
// This is where the data is converted into a csv file. This part is broken
// the file may already exist at that location burn it down if it does
if(file_exists(ABSPATH . "some/path/to/my/file/csv_export.csv")) {
unlink(ABSPATH . "some/path/to/my/file/csv_export.csv");
}
$csv_file_handler = fopen(ABSPATH . "some/path/to/my/file/candidate_export.csv", 'w');
if(!empty($csv_file_handler)) {
$title_array = array(
"ID",
"other_feild"
);
fputcsv($csv_file_handler, $title_array, ",");
if(!empty($data)) {
foreach($data as $data_piece) {
$array_as_csv_line = array();
foreach($data_piece as $object_property) {
$array_as_csv_line[] = (string)$object_property;
}
fputcsv($csv_file_handler, $array_as_csv_line, ",");
unset($array_as_csv_line);
}
} else {
fputcsv($csv_file_handler, array("empty"), ",");
}
// pros clean everything up when they are done
fclose($csv_file_handler);
}
我不确定需要更改哪些内容才能下载整个 CSV 文件。我相信这可能是一个配置问题,但我不应该。我被引导相信这一点,因为这个函数过去甚至可以处理 20,000 个 csv 行,现在它已经达到了 30,000 个并且正在中断。如果其他信息有帮助,请告诉我。以前有没有人遇到过巨大的 CSV 文件的问题?感谢任何可以提供帮助的人。