В техническом задании интернете магазинчика, коим в данный момент занимаюсь, необходимо автоматом заливать в БД прайс из 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.
Результаты тестирования:
- PHP-ExcelReader
4.57 sec
76 731 136 bytes - Zakkis.PHP.Excel.Parser.Pro.v4.5
7.27 sec
87 936 704 bytes - 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 файла”»
256 — много, у меня даже возможности столько выставить нет.
Действительно, 256мб — для людей с личным серваком. Хотя, такие задачи можно и на локалке делать…
256 мб то ничего не много! Переходите на норм хостинг!
вообще то действо происходит на выделенном сервере с 1 гигобайтом ОЗУ
но врубать в php.ini более 256 мегабайт — утопия
У меня 64 мб это капец буду переходить на чтонить по серьезней
Много дорого((((
А жаль(
да уж, дороговато
Много дорого((((
А жаль(
е очень как бы