PHP服务器文件下载意外中断

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文件,而忽略大部分数据。我估计在我的情况下

我在WordPress网站的管理部分内置了一个web界面。它在我的数据库中刮取了几个表,只是逐行显示了一个大的数据列表。这些数据大约有30000行,在for循环中以基本回波显示。在页面上显示所有30000行可以正常工作

此外,我还提供了下载完整数据行的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 );
我正在做进一步的研究,因为这不是一个可持续的解决方案。如有任何进一步建议,将不胜感激