使用php将大量数据写入Excel而不会出现内存限制错误

时间:2012-12-22 04:23:36

标签: php memory export-to-excel

我有一个oracle数据库,其中存储了大量的生物识别数据,如HRV和ECG。我需要在excel表中为每个用户显示这些数据。但是这个数据非常大,即使对于单个用户,我们也获得了超过1,00,000条记录。目前有100~用户。

我在做的是:

  1. 我使用命令行执行CRON作业,这是我在Zend框架中开发的。
  2. 我确保此CRON不重叠。
  3. 我逐个从oracle数据库中获取每个用户的所有数据,然后将其存储在一个数组中。
  4. 当我获取所有用户的数据时,我使用phpexcel库来生成Excel工作表。

    Excel工作表的结构

    • uid 1 / uid / 2 uid / 3 ----------- nth
    • data | data | data |
    • data | data | data |
    • |
    • 第n个
  5. 问题:

    PHP需要1.5 GB的RAM并将数据存储在数组中并将其发送到与phpexcel交互的函数,但这个库需要3-4个小时然后我会收到“致命:内存限制”错误。我的系统只有2 GB RAM。

    我应采取哪些步骤来优化我的代码以处理此大小的数据并以excel格式显示相同的信息,或者我需要增加RAM?

2 个答案:

答案 0 :(得分:7)

考虑仅使用PHP来启动某种包含结果数据的Excel可读分隔文件(CSV)。 (这个想法是你不会通过PHP写入Excel - 因为你遇到的限制)。

你可以通过类似Powershell的东西请求php生成的文件,然后让Powershell或其他脚本选择将csv文件直接打开到Excel中,然后保存为xlsx。

或者您可以让命令行php执行'系统'调用并执行脚本步骤,将csv直接打开到Excel中,然后将其保存为xlsx。

答案 1 :(得分:2)

如果单个用户数据很大,那么您使用这么多内存来保存这些数据,请尝试以批处理模式在Excel中编写它。它会节省你的内存使用量。