N1 N1Time

← Выпуски NEX1ON

NEX1ON 0.7.0

Медиа-библиотека

вышел 06.09.2026 PHP 8.2 или новее архивом не раздавался

Хранилище файлов в ядре: папки, уменьшенные копии, поиск, подписи для незрячих и строгие правила приёма чужих файлов.

Медиа-библиотека — часть ядра, а не модуль. Модуль можно выключить, хранилище файлов — нельзя: как только на картинку сослалась хоть одна запись, отключение означало бы битые ссылки по всему сайту.

Правила приёма файлов

Приём чужого файла — самое опасное место любого сайта, поэтому правила жёсткие:
  • Имя файла на диске придумывает движок. Присланное имя хранится только для показа.
  • Тип читается из содержимого, а не из расширения, и они обязаны совпасть.
  • Расширения — по белому списку, а не по списку запрещённых: список опасных всегда неполон.
  • Картинки пересобираются заново. Файл может быть настоящим JPEG и работающим кодом одновременно; после пересборки остаются только пиксели.
  • В папке загрузок ничего не исполняется: запрет для Apache, образец для nginx и такой же запрет на сервере разработки.

Картинки ограничены по числу точек, а не по весу файла: файл в пару килобайт может развернуться в памяти в гигабайты.

Что умеет

Папки, поиск, отбор по виду, подпись для незрячих у каждого файла, уменьшенные копии, повторный файл не задваивается, корзина вместо удаления с диска, свои права. SVG выключен по умолчанию — с объяснением почему.

Исправлено

  • Блок Directory в .htaccess Apache не принимает — это ошибка 500 на весь сайт. Защита загрузок перенесена в саму папку.
  • Встроенный сервер PHP не читает .htaccess и выполнял файл из загрузок. Разработка не должна вести себя мягче рабочего сервера — запрет продублирован.

Доступность

Внутренний этап разработки, архива нет.