2

我正在尝试使用 PHP excel 库导出 excel 文件。我可以导出大约 400 条记录。但是,当我查看更多大约 600 条记录时,我看到了 nginx 超时错误。我一直在努力解决这个问题。有谁知道如何解决这个问题?

到目前为止,我已经使用了 php 选项,例如.. set_time_limit(0); 和 ini_set('memory_limit','-1');

但仍然无法解决它。

请帮忙。提前致谢。

感谢您的回复。我联系了我的服务器公司,他们说他们添加了 fastcgi_read_timeout 360;到 nginx 设置。现在可以了。

但是,下载启动非常缓慢。我猜是因为 PHP Excel 库。谁能建议我如何让它更快地响应?

4

2 回答 2

2

Nginx 错误,所以更改 nginx 配置

proxy_read_timeout

于 2012-07-24T11:35:34.450 回答
2

通过查看您的代码,只需快速观察一下:

$objPHPExcel->getActiveSheet()->insertNewRowBefore($row,1);

是一项昂贵的操作(并且随着工作表中数据量的增加而变得更加昂贵),您将在 foreach() 循环的每次迭代中重复该操作。计算您需要多少行,然后在循环之前插入那么多新行。

对于您正在编写的每个单元格,您正在使用:

$objPHPExcel->getActiveSheet()->...

这需要为每个单元格调用工作簿的 getActiveSheet() 方法。在循环之前执行一次,将返回的工作表存储在一个变量中(例如 $ws),然后调用

$ws->setCellValue()

设置您的单元格值。

或使用流畅的界面:

$objPHPExcel->getActiveSheet()->setCellValue('A'.$row, $first_line)
    ->setCellValue('B'.$row, ucwords($dataRow['intlcode']))
    ->setCellValue('C'.$row, ucwords($dataRow['mobile_number']))
    ->setCellValue('D'.$row, ucwords($dataRow['r_datetime']))
    ->setCellValue('E'.$row, $dataRow['fname'])
    ->setCellValue('F'.$row, $dataRow['lname'])
    ->setCellValue('G'.$row, $dataRow['email'])
    ->setCellValue('H'.$row, $dataRow['picture'])
    ->setCellValue('I'.$row, $dataRow['lang'])
    ->setCellValue('J'.$row, $dataRow['interests'])
    ->setCellValue('K'.$row, $dataRow['title'])
    ->setCellValue('L'.$row, $dataRow['company'])
    ->setCellValue('M'.$row, $dataRow['address'])
    ->setCellValue('N'.$row, $dataRow['app_status']);

如果您可以使用 fromArray() 方法在一次调用中设置行中的所有单元格,那就更好了。

$objPHPExcel->getActiveSheet()->fromArray($dataRow,NULL,'B'.$row);
于 2012-07-25T11:27:12.477 回答