PHP服务器文件下载意外中断
我在WordPress网站的管理部分内置了一个web界面。它在我的数据库中刮取了几个表,只是逐行显示了一个大的数据列表。这些数据大约有30000行,在for循环中以基本回波显示。在页面上显示所有30000行可以正常工作 此外,我还提供了下载完整数据行的CSV文件的选项。我使用PHP服务器文件下载意外中断,php,wordpress,apache,csv,download,Php,Wordpress,Apache,Csv,Download,我在WordPress网站的管理部分内置了一个web界面。它在我的数据库中刮取了几个表,只是逐行显示了一个大的数据列表。这些数据大约有30000行,在for循环中以基本回波显示。在页面上显示所有30000行可以正常工作 此外,我还提供了下载完整数据行的CSV文件的选项。我使用fopen然后fputcsv构建CSV文件,以便从数据查询结果下载。此功能以前可以使用,但现在数据集为30000,CSV将无法正确生成。发生的情况是,前200~1000行将写入CSV文件,而忽略大部分数据。我估计在我的情况下
fopen
然后fputcsv
构建CSV文件,以便从数据查询结果下载。此功能以前可以使用,但现在数据集为30000,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文件。我相信这可能是一个配置问题,但我不应该。我之所以相信这一点,是因为这个函数过去甚至可以处理20000个csv行,现在已经是30000个了。请让我知道如果其他信息将帮助。以前有没有人遇到过大型CSV文件的问题?感谢所有能提供帮助的人。下载时间是否超过一分钟、两分钟或三分钟?如果是这样,Web服务器可能正在关闭连接。例如,如果您使用的是Apache FCGI模块,它有以下指令:
FcgidBusyTimeout
默认为300秒
这是请求处理的最大时间限制。如果FastCGI请求未在FcgidBusyTimeout秒内完成,则该请求将被终止
希望这能帮助您解决问题。我目前正在实现的答案是允许脚本使用更多的时间。为此,我只需在脚本运行之前运行以下代码:
set_time_limit ( 3600 );
我正在做进一步的研究,因为这不是一个可持续的解决方案。如有任何进一步建议,将不胜感激