Производство фотообоев в Новосибирске. Интернет магазин фотообоев. Изготовление - один день! Каталог 10 000 изображений!
14 Февраль 2011

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

posted in Программирование |

В техническом задании интернете магазинчика, коим в данный момент занимаюсь, необходимо автоматом заливать в БД прайс из 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. 1 On 18.02.2011, jungles said:

    256 — много, у меня даже возможности столько выставить нет.

  2. 2 On 19.02.2011, okoloblog said:

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

  3. 3 On 20.02.2011, Женя said:

    256 мб то ничего не много! Переходите на норм хостинг!

  4. 4 On 20.02.2011, GTAlex said:

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

  5. 5 On 20.02.2011, Nas said:

    У меня 64 мб это капец буду переходить на чтонить по серьезней

  6. 6 On 21.02.2011, ИгорьК said:

    Много дорого((((
    А жаль(

  7. 7 On 22.02.2011, Ника said:

    да уж, дороговато

  8. 8 On 05.03.2011, PSdau said:

    Много дорого((((

    А жаль(

  9. 9 On 05.03.2011, PSdau said:

    е очень как бы

Оставить комментарий