… Или как убить 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 :))

… И, конечно же, как раз тогда, когда мне это было нужно, их веб-сайт не работал!

Вся вселенная набросилась на меня так: иди домой, ты миру не нравишься. Все равно сегодня не починишь.

После долгих поисков подходящей версии я, наконец, воспроизвел среду. И что я узнал?

Это не проблема.

# черт # день

Наконец-то правильный повод

Когда я возвращался к исходной теории о том, что проблема связана с самими изображениями, к счастью, ко мне присоединился мой коллега. Он подтвердил проблему, но в одном из многих случаев ему удалось загрузить изображение.

Я начал подозревать, что проблема может быть связана с настройкой приложения и среды.

Так в чем была проблема?

  1. Некоторые функции обработки изображений не обрабатывались должным образом в случае ошибки (исключение ошибки)
  2. Регистрация этих исключений также была некорректной.
  3. Проблема (что удивительно) заключалась не в размере изображения на диске, а в их чрезвычайно высоком разрешении. Это означает, что для обработки изображения требовалось гораздо больше ресурсов памяти.

И решение?

Решение заключалось в разумном увеличении выделенной памяти, оптимизации обработки изображений и, в частности, в улучшении обработки исключений, которые могут возникнуть во время выполнения приложения.

Но хуже всего было то, что такая, казалось бы, банальная проблема превратилась в двухдневный кошмар. И это просто потому, что я обратил внимание не на то, что совершенно не имело отношения к проблеме. А также из-за совпадения, с которым я столкнулся при отладке.

#gameover #dogday

Что вы делаете, когда сталкиваетесь с какой-нибудь глупой проблемой?