Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) [1] 2  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Нехватает памяти при загрузке фотографии
Миша  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 2634
Пользователь №: 37963
На форуме: 3 года, 9 месяцев, 16 дней
Карма: 29




Нехватает памяти при загрузке фотографии.

Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 15164 bytes) 

Из этой ошибки я понял, что в моём распоряжений 64 мегабайта, но не хватило.
if(($img = imagecreatefromjpeg($_FILES['test']['tmp_name']))) { // на этой строке вылетает ошибка

} else {
return .... // прервать работу в случае ошибок, но почему то не срабатывает
}


Дальше проверил, что данная ошибка не зависит от размера файла, а зависит от количества точек (ширина-высота). т.е. ошибка вылетает даже при небольшом размере файла, но с большим расширением в ширину-высоту

Узнал, что jpg сжатый формат и когда распаковывается, каждая точка равна 3 байтам. Пытался загрузить файл 1,63 МБ, 3791*2527 (т.е. 3791*2527*3=28739571байт - 27,41 МБ), но вроде как доступно 64 МБ

Почему не срабатывает блок с return? Напишите, если правильно или нет понял всю схему. И посоветуйте как быть, отловить такую ошибку. Спасибо.


--------------------
Принимаю заказы, писать в ЛС
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 15355
Пользователь №: 4190
На форуме: 9 лет, 3 месяца, 20 дней
Карма: 467




Цитата (Медведь @ 27.04.2016 - 17:39)
Почему не срабатывает блок с return?

Потому что эксепшен надо. return срабатывает в случае, когда выполняются какие-то условия, но нет ошибки.


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26381
Пользователь №: 21350
На форуме: 7 лет, 2 месяца, 12 дней
Карма: 737




<?php
set_time_limit(0);


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Миша  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 2634
Пользователь №: 37963
На форуме: 3 года, 9 месяцев, 16 дней
Карма: 29




Цитата (Игорь_Vasinsky @ 27.04.2016 - 18:30)
<?php
set_time_limit(0);

Не проходит даже секунды, как ошибка вываливается, да и памяти по моим расчётам должно было хватить.


--------------------
Принимаю заказы, писать в ЛС
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3662
Пользователь №: 38635
На форуме: 3 года, 5 месяцев
Карма: 194




Цитата (Медведь @ 27.04.2016 - 16:36)
да и памяти по моим расчётам должно было хватить


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11933
Пользователь №: 23195
На форуме: 6 лет, 10 месяцев, 3 дня
Карма: 435

Трезвый :
7 лет, 9 месяцев, 2 дня




--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Миша  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 2634
Пользователь №: 37963
На форуме: 3 года, 9 месяцев, 16 дней
Карма: 29




Fatal error: Out of memory (allocated 121634816) (tried to allocate 19008 bytes)

Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 19008 bytes)


tried to allocate 19008 bytes - пытался выделить 19008 байт

blink.gif


--------------------
Принимаю заказы, писать в ЛС
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ron  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1282
Пользователь №: 41686
На форуме: 1 год, 9 месяцев, 18 дней
Карма: 23




Цитата (Игорь_Vasinsky @ 27.04.2016 - 18:30)
set_time_limit(0);

Ни в коем случае. Нужна проверка с неограниченным временем - идешь в консоль. И никак иначе.

Цитата (Медведь @ 27.04.2016 - 21:05)
tried to allocate 19008 bytes - пытался выделить 19008 байт

Да, память выделяется блоками. В этом сообщении говорится, что скрипт пытался получить памяти больше максиамльной на 19008 bytes. Но это совершенно не значит что ему не хватило именно этого объема, потому что читай выше.

Тебе формулу Инвиз привел по ссылке. Я на одном из проектов кинул памяти 256Mb, только после этого большие фотографии прямо с фотоаппарата стали обрабатываться без ошибок по нехватке памяти. По ссылке сделано более изящно, хотя я не вижу ничего плохого в максимально разрешенной памяти, даже если всю физ. память отдать на PHP. Если скрипт грамотно написан ничего не будет. Эта настройка скорее нужна шаред хостингам, где могут быть злодеи и вообще всякие дэбилы.

И да, если у тебя, Медведь, шаред хостинг, то памяти ты больше не получишь, скорее всего. wink.gif Потому что странное число - 64, по умолчанию обычно идет 128.


--------------------
5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Миша  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 2634
Пользователь №: 37963
На форуме: 3 года, 9 месяцев, 16 дней
Карма: 29




Сегодня на своём ПК запустил, увеличивая через настройки memory_limit, оказалось что для этой фотографии нужно 154 MB.


--------------------
Принимаю заказы, писать в ЛС
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Миша  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 2634
Пользователь №: 37963
На форуме: 3 года, 9 месяцев, 16 дней
Карма: 29




Цитата (sergeiss @ 27.04.2016 - 17:44)
Потому что эксепшен надо.

Не получится поймать исключение (try - catch) при Out of memory

Сделал так:
function DefaultFunction() {
$error = error_get_last();
if ($error[type]==1) {
echo "Обработка ошибки";
}
}

register_shutdown_function('DefaultFunction');


Может кто то ещё идеи подкинет?


--------------------
Принимаю заказы, писать в ЛС
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
killer8080  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 8925
Пользователь №: 26630
На форуме: 6 лет, 2 месяца, 24 дня
Карма: 603




попробуй Imagick вместо GD
Или вообще переложи ресайз на JS
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Zzepish  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 5583
Пользователь №: 32538
На форуме: 5 лет
Карма: 56




killer8080
Imagick более грамотно расходует ресурсы?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11933
Пользователь №: 23195
На форуме: 6 лет, 10 месяцев, 3 дня
Карма: 435

Трезвый :
7 лет, 9 месяцев, 2 дня


Цитата (killer8080 @ 30.04.2016 - 22:38)
Или вообще переложи ресайз на JS

самое грамотное решение


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ron  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1282
Пользователь №: 41686
На форуме: 1 год, 9 месяцев, 18 дней
Карма: 23




Цитата (Invis1ble @ 1.05.2016 - 04:20)
самое грамотное решение

Парни, библиотеку хорошую посоветуйте? Давно хотел ознакомиться с JS ресайзом. Нефиг нагружать ресурсы сервера, тем более, что зачастую у людей дома компы гораздо мощнее наших VPS-ок.


--------------------
5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Миша  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 2634
Пользователь №: 37963
На форуме: 3 года, 9 месяцев, 16 дней
Карма: 29






--------------------
Принимаю заказы, писать в ЛС
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) [1] 2  Ответ в темуСоздание новой темыСоздание опроса