Что делать с ошибкой PHP Fatal error: Allowed memory size exhausted?
Доброго времени суток, товарищи! Подскажите пожалуйста,столкнулся с проблемой, до этого не было такого. Сделал сайт на opencart 2.3, на локальном компьютере открывается всё отлично, быстро и без проблем. Начал переносить на хостинг - пошли проблемы, а именно:
Сайт постоянно падает, а лог ошибок выдает
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 33072 bytes) in /home/c/cw1709/public_html/system/library/image.php on line 26
Судя по написанному, сделал вывод, что не хватает памяти из-за огромных дурацких картинок (клиент настаивал, чтобы они были огромные и без потери качества) которые весили от 2-х до 8 метров. Начал ужимать картинки, ужал все до 150кб-800кб. По идее, это уже реальный размер. На сайте всего 140 товаров, у каждого по одной картинке. Сайт стал работать лучше, но иногда всё равно вылетает с этой ошибкой. Писал хостеру с просьбой увеличить память memory_limit - сказал, чтобы губы не раскатывал. Как выйти из данной ситуации? всего 140 товаров, а если было бы 5000?
Владислав Лысков, Да, у таймвеба заблочило, так и осталось 128М, а у джино изменилось. Жаль, что джино не очень подходит для ИМ. Может подскажете какой-нибудь хостинг не сильно дорогой но с такой возможностью?
Попробовал, потом проверил phpinfo - на таймвебе остался стандартный размер 128М, на джино изменился - стал 256М и всё стало работать хорошо. Просто странно, неужели 128М не хватает для работы сайта с 140 позициями...
Ambal89, К - качество кода. При каждом заходе программно генерятся превьюшки. Т.к. картинки большие - вся эта свистопляска нехило грузит память. Есть подозрение что в методе который использует этот созданный объект изображения $this->image = NULL в конце работы с картинкой не предусмотрен.
ThunderCat, Есть какие-нибудь варианты? Это, скорее всего, воду мутит плагин лупы для картинок, но с моими знаниями php я не смогу его исправить.
PS конечно, постоянная генерация превьюх это прискорбно...
Ambal89, надо смотреть код, там где картинка полностью изменена и готова к отдаче клиенту в виде изображения, объект обработки картинки зануляется, иначе он висит в памяти, известный "баг" гд библиотеки. Поищите в гугле на предмет "gd memory".
Ambal89, навскидку, все функции корректно завершаются imagedestroy, однако как все работает в комплексе, сказать сложно. Тут уже от вызовов этого объекта зависит. Сори, задача объемная, в 2 клика вопрос не решить. Как оно его использует - загадка, там пол проекта у вас наверно его пользует, где конкретно косяк только дебаг покажет. Пробуйте расставлять дебаг и смотреть размер занимаемой скриптами памяти по ходу выполнения кода, найдете где у вас большое потребление можно будет уже что-то править.