С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/30: Рейтинг темы: голосов - 30, средняя оценка - 4.63
 Аватар для useruser
166 / 90 / 38
Регистрация: 29.06.2015
Сообщений: 1,100

PHPExcel некорректно работает на сервере

12.02.2016, 13:40. Показов 6509. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
PHPExcel работает на Open Server и некорректно работает на Linux Debian.
Создает файл с расширением xlsl, потом его удаляет и снова создает но пустой. При открытии excel - ошибка.


На сервере Linux Debian конфиг php.ini почти не правил. Дополнительные расширения, кроме Zend не ставил.
php_info если надо...
https://jsfiddle.net/842aoorc/

PHPExcel требует
PHP version 5.2.0 or higher
PHP extension php_zip enabled *)
PHP extension php_xml enabled
PHP extension php_gd2 enabled (if not compiled in)

Код
PHP
1
2
3
echo "GD: ", extension_loaded('gd') ? 'OK' : 'MISSING', '<br>';
echo "XML: ", extension_loaded('xml') ? 'OK' : 'MISSING', '<br>';
echo "zip: ", extension_loaded('zip') ? 'OK' : 'MISSING', '<br>';
Выводит везде Ok. Т.е. получается всё установлено?

Подскажите, почему PHPExcel работает на Open Server и некорректно работает на Linux Debian?

Сам код если что. Работает без ошибок на Openserver и выдает правильный результат - excel таблицу.
На сервере вызывает ошибку 500, через некоторое время. Т.е. все сделал (создал файлы, обновил бд..), дошел до создания excel файла и выдал ошибку 500.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
error_reporting(E_ERROR);
 
include 'addons/PHPExcel/PHPExcel.php';
include 'addons/PHPExcel/PHPExcel/Writer/Excel2007.php';
$objPHPExcel = new PHPExcel();
 
$path_to_xlsx_file=$_SERVER['DOCUMENT_ROOT'].'/'.$sitedir."/files/TABLE1/1.xlsx";
//Заголовок
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0,1,'F1');
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(1,1,'F2');
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(2,1,'F3');
 
$result = mysql_query("SELECT * FROM `TABLE1`");
$select_amt = mysql_num_rows($result);
for($i=2; $i<$select_amt+2; $i++)
{
//Данные
$row=mysql_fetch_assoc($result);
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0,$i,$row[F1]);
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(1,$i,$row[F2]);
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(2,$i,$row[F3]);
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save($path_to_xlsx_file);
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.02.2016, 13:40
Ответы с готовыми решениями:

Phpexcel - русский текст отображается некорректно
Доброго времени суток! Пишу от безысходности я перечитал кучу форумов, и постов про приминение phpexcel и с функционалом проблем нет. ...

На сервере Drupal работает некорректно
Уустанавливаю друпал на hostinger и все вроде работает. А вот views еррорит. нельзя удалять, изменять а вот создавать можно хоть и с...

JS работает медленно на сервере. На локальном сервере быстро. В чём разница
Вечер добрый Сайт уже загрузил все JS/CSS/HTML. И после этого начинаются лаги. При открытие сайта с локального сервера - всё...

8
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
12.02.2016, 19:11
Цитата Сообщение от useruser Посмотреть сообщение
PHPExcel работает на Open Server и некорректно работает на Linux Debian.
Цитата Сообщение от useruser Посмотреть сообщение
Подскажите, почему PHPExcel работает на Open Server и некорректно работает на Linux Debian?
Как то странно вы сравниваете. Open Server это некая платформа, по большей степени используется как веб-сервер (с PHP). Он не может работать автономно, без операционной системы. Linux Debian это операционная система. Она сама по себе не может исполнять код PHP без PHP-интерпретатора (или веб-сервера с php).

Ну да бог с ним. По поводу ошибки. Сама о себе она не говорит ни о чем, лишь о том что возникли проблемы с настройками веб-сервера или его модулями. Нужно смотреть - что пишется в логах веб-сервера на этот момент.
1
 Аватар для useruser
166 / 90 / 38
Регистрация: 29.06.2015
Сообщений: 1,100
15.02.2016, 08:55  [ТС]
Что пишется в логах веб-сервера на этот момент.
-----------------------------------
[Mon Feb 15 10:13:19 2016] [error] [client 10.1.140.26] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 9946728 bytes) in /var/www/1/addons/PHPExcel/PHPExcel/Writer/Excel2007.php on line 304, referer: http://10.1.140.36/1/admin/adm... ook_name=1
[Mon Feb 15 10:13:20 2016] [notice] child pid 4526 exit signal Segmentation fault (11)
-----------------------------------
На сервере в это время создается exel файл, но он некорректный. Должен создаться большой exel файл (перебор строк из БД в цикле, см. 1 пост).
В то же время, если запустить другой скрипт, создающий маленький-тестовый Exel файл, то все создастся без проблем.
И все будет корректно.

Впринципе понимаю, что PHPExcel не хватило памяти. Вопрос - что делать?
Капитан очевидность подсказывает увеличить объем памяти, доступной PHP скрипту.
Сейчас у меня в php.ini memory_limit = 128M. На сервере около 2ГБ оперативной памяти.

Ошибка в логах выше возникла при создании exel файла из "информации" (назовем это так) объемом 4 Мб.
В таблицу был загружен текстовый файл (парсинг), размером 4 Мб.
У меня есть объем "информации" 20 Мб. И соответственно таблица побольше.

Вопрос такой - на сколько нужно увеличить объем памяти и как это лучше сделать - через php.ini или .htaccess?
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
15.02.2016, 09:05
Цитата Сообщение от useruser Посмотреть сообщение
В таблицу был загружен текстовый файл (парсинг), размером 4 Мб.
У меня есть объем "информации" 20 Мб. И соответственно таблица побольше.
PHPExcel - тяжеловесная штука, её потребности нельзя измерить весом одних только обрабатываемых данных.

Цитата Сообщение от useruser Посмотреть сообщение
Вопрос такой - на сколько нужно увеличить объем памяти
А нам откуда знать? Тестируйте, постепенно увеличивая макс. память, пока весь скрипт не отработает без ошибок.

Цитата Сообщение от useruser Посмотреть сообщение
как это лучше сделать - через php.ini или .htaccess?
Без разницы.

Я обычно в самом скрипте указываю (функция ini_set), чтобы выдавать много памяти только определённым функциям.
1
 Аватар для useruser
166 / 90 / 38
Регистрация: 29.06.2015
Сообщений: 1,100
15.02.2016, 10:27  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Я обычно в самом скрипте указываю (функция ini_set), чтобы выдавать много памяти только определённым функциям.
Сделал так же
PHP
1
ini_set("memory_limit", "512M");
Создались все файлы, кроме одного - самого большого (в этой таблице 100 тыс. строк).
Оптимизировать код, впринципе сложно. Там простой цикл - выборка из базы.
Давать ещё больше памяти?

Openserver c командой ini_set("memory_limit", "512M"); говорит

Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 1032 bytes) in C:\OpenServer\domains\site.ru\addons\PHP Excel\PHPExcel\Cell.php on line 1228
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
15.02.2016, 11:15
useruser, ну 100 тысяч - это внушительные размеры..., поэтому да, 512 может не хватить.
А этот файл для каких целей генерируется? Для скачивания пользователями?
0
 Аватар для useruser
166 / 90 / 38
Регистрация: 29.06.2015
Сообщений: 1,100
15.02.2016, 11:44  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
А этот файл для каких целей генерируется? Для скачивания пользователями?
Да. В базе MySQl есть таблица. Из этой базы/таблицы создается 2 файла.
Первый xml - обычный текстовик. Создается быстро.
Второй Excel 2007 xlsx. Вот он долго.

Пользователям надо именно Excel 2007 xlsx. Нет, конвертировать xml в Excel 2007 xlsx религия не позволяет.
(Там свои заморочки с софтом)

Выдал скрипту 1гиг памяти.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
15.02.2016, 11:55
useruser, можно ещё вывести обычную HTML-таблицу и отправить в заголовке, что это xls. Решение кривое, но часто используемое, ресурсов кушать будет меньше.
0
 Аватар для useruser
166 / 90 / 38
Регистрация: 29.06.2015
Сообщений: 1,100
15.02.2016, 12:02  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
useruser, можно ещё вывести обычную HTML-таблицу и отправить в заголовке, что это xls. Решение кривое, но часто используемое, ресурсов кушать будет меньше.
Тут выяснилось....что у меня апач скушал 700 мб памяти и не отдает её назад.
С каждым запуском скрипта ест по 1-2 мб памяти и не освобождает.
Создам отдельную тему.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.02.2016, 12:02
Помогаю со студенческими работами здесь

PHP скрипт (SellFileEasy) работает на локальном сервере, но не работает на хостинге
Всем доброго времени суток! Данный скрипт предназначен для продажи файлов. При переходе на ссылку файла, скрипт блокирует доступ к...

Код работает на локальном сервере, но на хостинге уже не работает
Привет всем) Помогите плиз... Есть веб проект, который я делал на локальной базе из сборки EasyPHP. Там все отлично работает. Теперь мне...

Getimagesize работает на одном и не работает на другом сервере
list($w_i, $h_i, $type) = getimagesize($file_input); Переменная $file_input начинается так: ...

Скрипт не работает на домашнем сервере, но работает на хостинге
есть скрипт который отлично работает на хостинге: &lt;?php define( 'MAIL_TO', 'myname@pochta.net' ); define( 'SITE',...

Некорректно работает
Здравствуйте помогите пож-та с задачкой: Сформировать вещественный массив X1(N), N≤20, элементами которого являются случайные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru