Универсальный модуль чтения файлов по расширению

Выберите reader по суффиксу: обычный файл, gzip-поток или ZIP-архив. Имя файла определяет предполагаемый обработчик, но не доказывает, что содержимое действительно корректно.

Короткий ответ

Что ответить на собеседовании

Выберите reader по суффиксу: обычный файл, gzip-поток или ZIP-архив. Имя файла определяет предполагаемый обработчик, но не доказывает, что содержимое действительно корректно.

Подробный разбор

Ответ с пояснениями

Условие

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

Пример использования:

$filename = ''; // .txt, .txt.gz, .txt.zip

Компонент должен корректно обрабатывать обычные текстовые файлы, а также их сжатые варианты (gzip, zip) без дополнительной конфигурации.

Ответ

Выберите reader по суффиксу: обычный файл, gzip-поток или ZIP-архив. Имя файла определяет предполагаемый обработчик, но не доказывает, что содержимое действительно корректно.

Задайте общий контракт чтения потока и фабрику по .txt, .txt.gz, .txt.zip. Gzip содержит один поток; ZIP может содержать несколько файлов, поэтому правило выбора записи необходимо определить — например, ровно один текстовый файл, иначе ошибка. Проверяйте результат открытия, ограничивайте распакованный размер и закрывайте ресурсы в finally. Неизвестный формат нужно отклонять: универсально прочитать любой формат только по расширению невозможно.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее