PHP Excel内存限制2GB耗尽读取286KB文件

时间:2013-08-31 06:24:47

标签: php excel memory-leaks

附加信息: 我是从命令行运行的。 CentOS 6,32GB Ram总计,2GB内存用于PHP。 我尝试将内存限制增加到4GB,但现在我得到Fatal error: String size overflowPHP maximum string size is 2GB

我的代码是非常简单的测试代码:

$Reader = new SpreadsheetReader($_path_to_files . 'ABC.xls');
$i = 0;
foreach ($Reader as $Row)
{   $i++;
    print_r($Row);
if($i>10) break;

}

只打印10行。这需要2 GB的内存?

错误发生在excel_reader2.php

的第253行

OLERead

内的课程function read($sFilenName)

这是造成我筋疲力尽的代码:

if ($this->numExtensionBlocks != 0) {

        $bbdBlocks = (BIG_BLOCK_SIZE - BIG_BLOCK_DEPOT_BLOCKS_POS)/4;

    }



    for ($i = 0; $i < $bbdBlocks; $i++) { // LINE 253

        $bigBlockDepotBlocks[$i] = GetInt4d($this->data, $pos);

        $pos += 4;

    }

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。事实证明它与php代码有些无关。

我正在编写的程序从电子邮件和FTP下载.xls.xlsx.csv个文件。导致内存溢出的.xls文件以ASCII模式而不是Binary下载。

我将默认设置更改为二进制模式,并添加了一项检查,将其更改为.csv文件的ASCII模式。

我仍然觉得奇怪的是该程序因此创建了一个2GB的字符串。如果二进制文件中没有换行符,那么我可以看到整个文件可能最终会在一个字符串中结束。但该文件只有286KB。所以,这很奇怪。