… Или как убить 2 дня по глупой случайности
И снова доказано, насколько легко можно запутаться при поиске решения конкретной проблемы. На первый взгляд банальная проблема при тестировании галереи (в частности, загрузка изображений) без надобности отняла у меня 2 дня жизни.
До этого момента все шло гладко
При разработке галереи я использовал набор из нескольких изображений с разными атрибутами, то есть очень большие / маленькие изображения, разные форматы и т. Д. Я также протестировал валидацию на случай, если пользователь пытается загрузить файлы, которые не являются изображениями.
До этого момента все шло безупречно.
Отсюда он перестал работать
После завершения и финального тестирования в производственной версии я начал использовать несколько изображений и попытался смоделировать поведение обычного пользователя. Поэтому я получал изображения из разных фотобанков, пока не наткнулся на источник X = источник моей проблемы.
Ни одно из исходных изображений X не может быть загружено в галерею. Остальные изображения из других источников были в полном порядке.
1-е ошибочное предположение
Я думал, проблема в самих изображениях из этого источника. Поэтому я сосредоточил все свое внимание на анализе этих изображений.
Оказалось, что изображения из источника X не совсем стандартные. Несколько аналитических инструментов также подтвердили, что их MIME TYPE - это просто общий поток приложений / октетов.
Честно говоря, я понятия не имел, почему это было оценено как общий поток октетов. Я определенно ожидал MIME TYPE image / jpeg, image / png или чего-то подобного ...
Однако проблема с MIME-типами помогла мне раскрыть одну интересную вещь. Фреймворк Symfony действительно использует MIME TYPE в процессе проверки файла изображения, но image / svg для формата svg отсутствует в списке поддерживаемых MIME TYPE.
Допустимый тип MIME - это только тип image / svg + xml.
Это связано с тем, что некоторые файлы svg уменьшены, и их содержимое начинается непосредственно с тега ‹svg›. Такой файл имеет MIME TYPE image / svg - , поэтому он не проходит проверку и поэтому не оценивается как изображение.
Для Symfony действительный файл svg должен начинаться с тега ‹? Xml version =” 1.0 encoding = ”iso-8859–1?›, Как того требует правильно сформированный синтаксис XML-документа.
2-е ошибочное предположение
Один из моих коллег включился в процесс поиска ошибки на одном этапе и заметил, что проблема не проявляется на другом устройстве. Это вернуло меня к началу, и мне пришло в голову, что проблема может быть связана с другой средой разработки.
Другая версия PHP
Совершенно отчаявшись и разозлившись, я решил изменить среду разработки и версию PHP. Единственным подходящим источником для PHP-библиотек Windows является https://windows.php.net/download - в основном веб-сайт, на котором построен весь мир, и которым пользуется каждый разработчик (кроме положительных разработчиков Apple :))
… И, конечно же, как раз тогда, когда мне это было нужно, их веб-сайт не работал!
Вся вселенная набросилась на меня так: иди домой, ты миру не нравишься. Все равно сегодня не починишь.
После долгих поисков подходящей версии я, наконец, воспроизвел среду. И что я узнал?
Это не проблема.
# черт # день
Наконец-то правильный повод
Когда я возвращался к исходной теории о том, что проблема связана с самими изображениями, к счастью, ко мне присоединился мой коллега. Он подтвердил проблему, но в одном из многих случаев ему удалось загрузить изображение.
Я начал подозревать, что проблема может быть связана с настройкой приложения и среды.
Так в чем была проблема?
- Некоторые функции обработки изображений не обрабатывались должным образом в случае ошибки (исключение ошибки)
- Регистрация этих исключений также была некорректной.
- Проблема (что удивительно) заключалась не в размере изображения на диске, а в их чрезвычайно высоком разрешении. Это означает, что для обработки изображения требовалось гораздо больше ресурсов памяти.
И решение?
Решение заключалось в разумном увеличении выделенной памяти, оптимизации обработки изображений и, в частности, в улучшении обработки исключений, которые могут возникнуть во время выполнения приложения.
Но хуже всего было то, что такая, казалось бы, банальная проблема превратилась в двухдневный кошмар. И это просто потому, что я обратил внимание не на то, что совершенно не имело отношения к проблеме. А также из-за совпадения, с которым я столкнулся при отладке.
#gameover #dogday
Что вы делаете, когда сталкиваетесь с какой-нибудь глупой проблемой?