PHP — чтение большого Excel файла


В техническом задании интернете магазинчика, коим в данный момент занимаюсь, необходимо автоматом заливать в БД прайс из xls файла (к сожалению в других форматах получить прайс нет возможности).

После изучения выдачи поисковиков и анализа полученной информации, остановился на 3х вариантах

Не буду томить, сразу к результатам:

Исходные данные:

Файл содержит 25 тысяч строк 8 стоблцов — половина строки с русским текстом, половина циферки.

Тестируется время исполнения и потребление память PHP memory_get_peak_usage() (чистое потребление скриптом — без учёта потребления самим интерпретатором).

Все библиотеки рабочие, и успешно справились с задачей, но, пару моментов отмечу:

  • Для тестирования PHPExcel 1.7.5 пришлось увеличить в 2 раза memory_limit — до 256М  иначе не хотела работать.
  • Zakkis ни в какую не хотел нормально отрабатывать русский шрифт — пришлось немного поправить используемую в процессе функцию uc2html  — в условие if (isset($chcode1[$a]) …. добавил else и вставил содержимое функции convertUnicodeString.

Результаты тестирования:

  1. PHP-ExcelReader
    4.57 sec
    76 731 136 bytes
  2. Zakkis.PHP.Excel.Parser.Pro.v4.5
    7.27 sec
    87 936 704 bytes
  3. PHPExcel 1.7.5
    30.62 sec
    258 638 728 bytes

P.S.
На втором файлике на 40 тыс позиций к сожалению ни один из скриптов не справился — не хватает памяти и всё тут 🙁
ПРОБЛЕМА стоит ребром, как решать — на данный момент не знаю.
Пробовал задействовать на сервере (FREEBSD 7.3) из портов пакет xlreader — он вообще ни один из xls файлов не открыл.
На локальной машине с денвером и выделением на PHP 256 мб памяти ещё кое как отрабатывает, а на сервере, где PHP установлено как CGI, почему то и 512 мб не спасает.

Пока вижу одно решение — конвертировать на локалке и заливать на сервак. Но такое решение мне не по душе 🙁
Либо как то установить ещё один PHP с минимальными инклудами (только необходимое для конвертации xls в текстовый формат) и запускать консольно — но этот вариант ещё не прорабатывал.

Надеюсь на Ваши советы !


9 комментариев на «“PHP — чтение большого Excel файла”»

  1. Действительно, 256мб — для людей с личным серваком. Хотя, такие задачи можно и на локалке делать…

  2. вообще то действо происходит на выделенном сервере с 1 гигобайтом ОЗУ
    но врубать в php.ini более 256 мегабайт — утопия

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *