致命错误:允许的内存大小134217728字节在第65行的[mypath]中耗尽(试图分配373字节)


Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 373 bytes) in [mypath] on line 65

我试图用PHPExcel实现将XLS文件中的单个工作表转换为CSV-内存耗尽,但我仍然遇到内存问题。

想想@BT643代码——我使用的代码——包括@Mark Baker在他回答的各种帖子中解释的大部分黄金规则(phpexcel允许134217728字节的内存耗尽)。

我的excel文件有61列,大约8000行,大约有50万个单元格。尺寸5561KB。我没想到它需要读"大块"。

我错过了什么?

这是我正在使用的代码:

include 'Classes/PHPExcel.php';
include 'Classes/PHPExcel/IOFactory.php';
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
$cacheSettings = array( 'memoryCacheSize' => '2GB');
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
$reader = PHPExcel_IOFactory::createReader('Excel5');
$reader->setReadDataOnly(true);
$reader->setLoadSheetsOnly('mytab');
$filename = 'C:/xampp/htdocs/mycode/myfile.xls';
$excel = $reader->load($filename);
$filename_fixed='myfile.csv';
$writer = PHPExcel_IOFactory::createWriter($excel, 'CSV');
$writer->save($filename_fixed);

memoryCacheSize设置为2GB不是个好主意。这意味着您要告诉PHPExcel在考虑使用phptemp磁盘缓存数据之前,要使用高达2GB的服务器内存(可能高于允许的php内存限制)。如果你有2GB的可用内存,你可能不需要缓存:memoryCacheSize的值应该设置为允许PHPExcel使用可用php内存的最大值,然后再切换到使用phptemp磁盘缓存