2015-07-01 5 views
2

Я использую PHPexcel, чтобы открыть файл .xlsx (на ovh interified server) и столкнулся с проблемами, которые я решил.PHPExcel Неустранимая ошибка: допустимый размер памяти

У меня есть новая проблема при сохранении измененного файла:

«Фатальная ошибка: Разрешены памяти размером 536870912 байт исчерпаны (пытались выделить 49 байт) в/главная/observatvu/WWW/библиотеки/PHPExcel/библиотека/PHPExcel/Cell.php на линии 870"

Я прочитал много вопросов и ответов по Интернету и попробовал некоторые решения, как:

  • memory_limit в .htaccess => проблема на сервере, он does'nt работы
  • ini_set ('memory_limit', '512M') => У меня есть сообщение выше ... с другими значениями ini_set У меня есть другие размеры памяти, но нет сохранения файла.
  • Я не могу изменить php.ini

Я попытался написать setPreCalculateFormulas (ложный) во время сохранения файла, но всегда с той же проблемой.

Пожалуйста, кто-нибудь может помочь мне найти рабочее решение?

Спасибо

+0

возможно дубликат [PHPExcel допустимого размера памяти 134217728 байт исчерпан] (http://stackoverflow.com/questions/5560053/phpexcel-allowed-memory-size-of-134217728-bytes-exhausted) –

+0

У вас попробовал любую из [кеширования кеша в PHPExcel] (https://github.com/PHPOffice/PHPExcel/blob/develop/Documentation/markdown/Overview/04-Configuration-Settings.md), которые предназначены для уменьшения количества память, которую он использует? –

+0

Я пробовал $ cacheMethod = PHPExcel_CachedObjectStorageFactory :: cache_to_phpTemp; $ cacheSettings = array ('memoryCacheSize' => '1024MB'); PHPExcel_Settings :: setCacheStorageMethod ($ cacheMethod, $ cacheSettings); – Djo

ответ

3

Если вы пробовали

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

Тогда это не будет работать.

У вас есть предел 536,870,912 (512MB) для PHP

Линия

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

говорит PHPExcel использовать 1024MB из PHP памяти до того переключения с помощью PHP: // темп для кеширование .... это то, что память элемент аргумента имя memoryCacheSize означает.

Используйте нижней значения для значения memoryCacheSize, чем сумма вашего лимита памяти PHP

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

Благодарим вас за ответ. Я просто попробовал ваше решение, и у меня такая же ошибка. Я попробовал варианты кэширования ячеек в PHPExcel и ту же ошибку ... – Djo

+0

Вам нужно разработать правильный метод кеширования и правильные аргументы для настроек ..... почему бы вам не оставить настройки для php:// temp по умолчанию? –

+0

Извините, я не понимаю ... «Оставьте настройки для php: // temp по умолчанию?» => Что ты имеешь в виду? – Djo

2

Если вы не можете заставить его работать с системой кэширования PHPExcel, вы можете дать Spout попробовать: https://github.com/box/spout , Он был разработан для работы с файлами любого размера без возникновения проблем с памятью или временем.

Все, что вам нужно, это 10MB памяти, и вы можете прочитать все файлы XLSX вы хотите :)

+0

Thank вы за свой комментарий. Я собираюсь попробовать ваше решение – Djo

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; 
} 
Смежные вопросы