致命错误:读取大型excel文件时,耗尽内存大小

当使用Spreadsheet_Excel_Reader读取大的.xls文件时,出现29MB(3张,28000行/张)的错误。

致命错误:允许内存大小134217728字节用尽(试图分配71个字节)…

我将php.ini中的memory_limit更改为128M,并尝试将其运行时间更改为ini_set('memory_limit','-1'); 为无限,但错误没有解决。

不知道你可以做'-1'。

你可以尝试:

ini_set('memory_limit', '512M'); 

ini_set('memory_limit', '-1'); 覆盖默认的PHP内存限制

AND / OR

 ini_set('max_execution_time', INCREASE TIME); 

大概一台服务器有一个64位的处理器。 GetInt4d位移不适用于64位处理器。

使用这个hack来确保在32位和64位系统上的<< 24块的正确结果,只需将GetInt4d函数的代码replace为以下位置:位置:Excel / olereader.inc第27行,函数GetInt4d()

$_or_24 = ord($data[$pos+3]);

if ($_or_24>=128) $_ord_24 = -abs((256-$_or_24) << 24); else $_ord_24 = ($_or_24&127) << 24;

return ord($data[$pos]) | (ord($data[$pos+1]) << 8) | (ord($data[$pos+2]) << 16) | $_ord_24;