PHPExcel致命错误:允许的内存大小

时间:2015-07-01 10:03:01

标签: php memory phpexcel

我使用PHPexcel打开.xlsx文件(在ovh共享服务器上)并遇到我解决的问题。

保存修改后的文件时出现了新问题:

“致命错误:在870行的/home/observatvu/www/libraries/phpexcel/library/PHPExcel/Cell.php中,允许的内存大小为536870912字节耗尽(试图分配49个字节)”

我在互联网上阅读了很多问题和答案,并尝试了一些解决方案,如:

  • memory_limit in .htaccess =>服务器上的问题,它无法正常工作
  • ini_set('memory_limit','512M')=>我有上面的消息...与其他ini_set值我有其他大小的内存错误但没有保存文件。
  • 我无法修改php.ini

我在保存文件期间尝试编写setPreCalculateFormulas(false),但总是遇到同样的问题。

请有人帮我找到合适的解决方案吗?

谢谢

3 个答案:

答案 0 :(得分:3)

如果你试过

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
$cacheSettings = array( 'memoryCacheSize' => '1024MB');
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings); 

然后它就行不通了。

您的PHP

的限制为536,870,912(512MB)

该行

$cacheSettings = array( 'memoryCacheSize' => '1024MB');

告诉PHPExcel使用1024MB的PHP内存之前切换到使用php:// temp进行缓存....这是内存元素参数名称memoryCacheSize表示。

对memoryCacheSize值使用 lower 值,而不是PHP内存限制

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
$cacheSettings = array( 'memoryCacheSize' => '256MB');
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings); 

答案 1 :(得分:2)

如果您无法使用PHPExcel的缓存系统,则可以尝试Spouthttps://github.com/box/spout。 它旨在处理任何大小的文件,而不会导致内存或时间限制问题。

你需要的只有10MB的内存,你可以阅读你想要的所有XLSX文件:)

答案 2 :(得分:0)

将错误的单元格字母传递给phpExcel函数时会发生此类错误,例如:

$objPHPExcel->getActiveSheet()->setCellValue($cell, $value);

请确保不要像这样增加列字母:

chr(ord($col) + 1);

最好使用自定义增量功能,如:

//$start = 'A'
private function _incrementCol($start, $offset)
{
    $result = $start;
    for($i = 1; $i <= $offset; $i++) {
        $result++;
    }
    return $result;
}