Выберите 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. Неизвестный формат нужно отклонять: универсально прочитать любой формат только по расширению невозможно.