0

我有一个内置到 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 文件的问题?感谢任何可以提供帮助的人。

4

2 回答 2

2

“下载”是否需要超过一分钟、两分钟或三分钟?如果是这样,网络服务器可能正在关闭连接。例如,如果您使用的是 Apache FCGI 模块,它具有以下指令:

FcgidBusyTimeout

默认为 300 秒。

这是请求处理的最大时间限制。如果一个 FastCGI 请求没有在 FcgidBusyTimeout 秒内完成,它将被终止。

希望这可以帮助您解决问题。

于 2013-08-29T02:18:49.870 回答
0

我目前正在实施的答案是允许脚本使用更多时间。为此,我只是在脚本运行之前运行以下代码:

set_time_limit ( 3600 );

我正在做进一步的研究,因为这不是一个可持续的解决方案。任何进一步的建议将不胜感激。

于 2013-08-30T15:23:19.703 回答