Добрый день. У меня возникла проблема с работой excel5 (.xls, Excel 2003) через PhpExcel. А Excel2007 и CSV работают нормально.
При чтение .xls файлов выдает ошибку: ErrorException [ Notice ]: Uninitialized string offset: 339
В какой-то момент в функцию function _GetInt4d($data, $pos) посылается $data нулевой длины, причину выяснить не получилось. В гугле нашел пару решений связанных с конфигурацией сервера:
mbstring.func_overload 0
mbstring.internal_encoding=ISO-8859-1
Но эти параметры важны для работы Битрикс(менять нельзя).
Заказчик захотел, чтобы моя система была расположена на одном хостинге с Битрикс, просто в отдельной папке. Система написана на Kohana.
Пытался использовать класс PHP Excel Reader. Выводит следующую ошибку: The filename /var/www/vhosts/test89.ru/httpdocs/parser/Upload/mailexcel/SB.xls is not readable
Не проходит проверку: if (substr($this->data, 0, 8) != IDENTIFIER_OLE)
При сравнение в браузере также не совпадали.
Если за комментировать эту проверку, то выводит: ErrorException [ Notice ]: Undefined property: OLERead::$wrkbook
Локально/на другом сервере это работает? Можно использовать ini_set, что бы изменить параметры до выполнения скрипта и вернуть назад после, например так:
ini_set('mbstring.internal_encoding', 'UTF-8');
Ну и вы в курсе, что PhpExcel - это для совсем маленький файлов? Для больших лучше использовать АПИ LibreOffice.
Варианты такие:
ini_set
htaccess
конфиг апача
конфиг php
Если не один из них не возможен, то только в коде копать где он использует эти кодировки.
mbstring.internal_encoding - это кодировка HTTP-ввода. Тут нужно дебажить, просмотреть весь вызываемый код и найти где он использует HTTP-ввод.
mbstring.func_overload - с этим сложнее. Его тоже нужно попробовать по списку поменять. Если бы наоборот, нужно было бы какие-нибудь функции переопределить, то можно было бы заменой вставить и все. А так даже не знаю как это назад вернуть.