Используя PHP, как я могу определить (распаковать, если применимо) и извлечь файлы из файлов.tar, .gz, .tar.gz, .zip?

Я знаю это \Phar а также \PharData существуют, но у меня есть некоторые проблемы с методами, которые они поставляют до сих пор. Мне все еще нужно определить mime-тип / тип файла любыми средствами, прежде чем определить, какой Phar*::method() использовать для извлечения архива и работы с файлами, которые в нем содержатся.

Есть ли какой-нибудь класс "easy-button", который я мог бы включить (возможно, какой-то пакет, доступный через composer), который обрабатывает это на очень высоком уровне? Или я не могу использовать Phar и друзья правильно или нуждаются в повторном RTM до сих пор?

По сути, я хочу сделать следующее (это сценарий CLI, который я сейчас контролирую, поэтому безопасность, хотя и важна для такого рода вещей, пока находится в тупике):

  1. Определите, что файл может быть каким-то архивом.
  2. Проверьте, кажется ли это одним из следующих: .tar, .gz, .tar.gz, или же .zip,
  3. Если это так, попытайтесь извлечь архив, а затем проанализировать содержимое его фактических файлов.

Есть ли "легкая кнопка" для этого, о которой я не знаю, или мне нужно построить какую-то логику, которая как можно лучше угадывает, какой это тип архива, а затем попытаться использовать соответствующий Phar* метод, чтобы попытаться извлечь его файлы и делать с ними все, что мне нужно?

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

2 ответа

Поэтому, продолжая исследовать это, я в конечном итоге увидел свой собственный (этот) ТАК вопрос в результатах поиска Google, что меня почему-то раздражает. Так что на случай, если кто-то наткнется на это в поисках хорошего решения, я с тех пор нашел пару, выполнив поиск по https://packagist.org/search/?q=archive (см. Рисунок):

Вот некоторые из них, которые кажутся многообещающими.

wapmorgan / UnifiedArchive:

  • wapmorgan / UnifiedArchive (packagist)
  • wapmorgan / UnifiedArchive (источник на github)

    Особенности (на первый взгляд):

    • Имеет только одно требование pear/archive_tar (который включает в себя еще несколько полезных классов также из груши).
    • Он пытается определить тип файла для вас, поэтому он может устранить необходимость делать это самостоятельно.

алхимия / проворный:

zetacomponents / Архив

  • зетакомпоненты / Архив (упаковщик)
  • зетакомпоненты / Архив (источник на github)

    Особенности (на первый взгляд):

    • Кажется, это чистая реализация PHP? Если так, то это просто потрясающе.
    • Последний раз обновлялся 15 дней назад, поэтому он является самым активным из трех упомянутых мною.
    • Кажется, поддерживается организацией, а не одним человеком.
    • На данный момент у него больше всего загрузок на packagist (при поиске "архива"), и хотя я еще не играл с ним, обычно это хороший знак.

Отказ от ответственности: я только на самом деле пытался wapmorgan/UnifiedArchive на момент написания статьи, и до сих пор это именно то, что я искал.

Во всяком случае, я надеюсь, что это поможет любому, кто может наткнуться на этот вопрос.

Если вам не нужен чистый php и если ваш код работает на Linux-машине,

exec('uncompress [-cfv] [file...]');

или

exec('unzip filename.zip -d destination');

распакует файл и сделает его пригодным для использования на php. Конечно, вам нужно проверить расширение (zip, tar и т. Д.), Чтобы вызвать правильную команду

Другие вопросы по тегам