问题描述:
我遇到的问题是,用的是nginx+php,然后一个页面需要用到下载功能,数据大概有4w-8w条吧(数据小的时候没有问题),直接输出到一个网页是下载Excel的,下载完后看数据只有2w多条,但是php程序一直是走到了最后,因为我最后一行写入了一个日志文件,日志里面记录了,处理的条数是正确的.
我下载了几次,文件的大小不一样一个是12.7m 一个是14.5m,我掐表算时间,也不一样一个是2分钟,一个是1分钟45秒样子.
我想是不是nginx对于每次相应的有时间限制或者大小限制,或者是proxy那里有时间和大小限制呢?
之前我的是没有调用ob_flush (把数据从PHP的缓冲中释放出来) 就一直报的是504 超时,后来我每次循环输出玩数据后 ,就调用ob_flush了,就出现了上面的 问题,数据量小的时候没有问题,nginx的配置都是默认的,我的php的关键的代码是
关键代码:
header('Content-Type:text/xls');
header('Content-Type:application/vnd.ms-excel;charset=utf-8');
header("Content-Disposition:attachment;filename=xxx.xls");
header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
header('Expires:0');
header('Pragma:public');
echo <<<EOT
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> xxx </title>
</head>
<body>
<div class="rightinfo">
<table border="1">
<tr>
<th>序号</th>
<th>xxx</th>
<th> xxx </th>
<th>交易时间</th>
<th>交易类型</th>
<th> xxx </th>
<th> xxx </th>
<th> xxx </th>
<th> xxx </th>
</tr>
EOT;
// 下面是输出的主题
foreach ($list as $r) {
printf("<tr>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
</tr>",
++$count,
$ss,
....
);
unset($r);
}