Чтение нескольких файлов с PHPExcel - PullRequest
4 голосов
/ 23 апреля 2010

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

foreach( $file_list as $file ) {

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

}

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 24 апреля 2010

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

0 голосов
/ 23 апреля 2010

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

"... похоже, что PHP 5.3 исправит этот. Тем не менее, я хотел бы увидеть подтверждение этого где-то. "[21 октября 2008]

( источник ) ( больше вещей )

...