2010-04-23 5 views
4

Я только недавно начал использовать эту библиотеку (то есть из CodePlex), но у меня возникли некоторые проблемы. Моя цель - использовать его, чтобы я мог обрабатывать некоторые данные из нескольких файлов Excel и отправлять такие данные в базу данных для каждого файла. Я делаю что-то вроде:Чтение нескольких файлов с помощью PHPExcel

foreach($file_list as $file) { 

    $book = PHPExcel_IOFactory::load($path . $file); 

} 

Таким образом, внутри Еогеасп я нахожусь (сейчас) только с указанием данных для пользователя, но после пяти файлов, я получаю ошибку памяти:

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 50688 bytes) in /var/www/test/classes/PHPExcel/Shared/OLERead.php on line 76 

Есть ли способ __destruct объекта после загрузки каждого файла, поэтому пространство зарезервировано (сделано бесплатно) для следующего файла вместо того, чтобы накапливать его, или вы скорее знаете причину и обход для этого?

Пожалуйста, дайте мне знать любые предложения, которые у вас есть.

Заранее спасибо.

+1

+1. Это большой вопрос, и я хотел бы знать ответ сам, для будущей справки. – Rob

ответ

2

последняя версия кода SVN для PHPExcel (только что проверил сегодня) вводит кэширование клеток, чтобы уменьшить использование памяти ... это такая новая функция, я даже не имел время для его документирования. Хотя метод по умолчанию идентичен существующему методу, с листом связи < ->, содержащим циклическую ссылку, я считаю, что использование любого из механизмов кэширования памяти должно устранить эту циклическую ссылку. Если это не так, сообщите мне, и я могу сломать ссылку, когда вы отключаете рабочую книгу/лист, используя некоторую логику кэширования, которая уже отключает это соединение при сериализации ячеек для кеширования.

+0

Отметить, я заменил папку «Классы», у меня был с последним сгенерированным источником на CodePlex, и теперь я получаю это сообщение об ошибке: Неустранимая ошибка: вызов неопределенной функции imagecreatefromstring() в/var/www/competencias/Classes/PHPExcel/Reader/Excel5.php в строке 774 –

+0

imagecreatefromstring() - это функция GD2, хотя вызов этой функции в PHPExcel не изменился в последней версии: на самом деле она возвращается даже до 1.6.7. Вы должны убедиться, что GD2 включен в вашей сборке PHP. –

+0

Странно. Я не коснулся первоначальной среды разработки, а это значит, что GD2 был включен раньше. Я проверю phpinfo() и отчитаюсь. –

0

Это была проблема на некоторое время, и это не похоже на то, что вокруг есть способ, - только если кто-то придумал что-то умное с момента выпуска 5.3 ......

"...it seems that PHP 5.3 will fix this. However, I would like to see a confirmation of this somewhere." [Oct 21 2008]

(source) (more stuff)

+0

Я могу попробовать PHP 5.3. Я проверю и отправлю отчет. Благодаря! –

+0

Даже если PHP 5.3 поддерживает что-то для этого, он может быть не реализован. Также, когда этот пост был сделан, PHP 5.3 все еще находился на расстоянии 8 месяцев. Но кто знает. Возможно, ответ на этот пост вызовет еще одну активность :) –

+1

Определенно исправлено на PHP 5.3, хотя я пробовал эту версию в Windows, а моя текущая среда разработки находится в Linux. Я попробую обновить мою сборку PHP PHP позже. Это займет время, чтобы завершить (200+ файлов), но оно работает. Спасибо за ссылку: не смогли бы это сделать без вашей помощи! –

 Смежные вопросы

  • Нет связанных вопросов^_^