phar исключает каталоги при создании архива tar

Я хочу создать архив tar в сценарии PHP, используя встроенный PharData учебный класс.

Я хочу, чтобы архив tar представлял каталог, поэтому я подумал об использовании PharData::buildFromDirectory() сделать это. К сожалению, каталог также является git-репозиторием и имеет .git папка в нем, которая намного больше, чем сама директория.

Так что мне нужно удалить это .git каталог (в идеале также .idea каталог …) из архива, потому что это будет раздувать его без необходимости.

Что я пробовал до сих пор:

  • Использование регулярного выражения для фильтрации каталога:

    $archive->buildFromDirectory("..", "@^(?!.git).+@");
    

    Который не работал.

  • С помощью PharData::delete(), но, к сожалению, кажется, что удалить только файл, а не каталог.

Итак, как лучше всего делать то, что я хочу?

4

Решение

Проблема с вашим регулярным выражением в том, что полный путь файла соответствует, не только каталог (базовое имя). Таким образом, вы не можете отфильтровать .git сам каталог.

Использование отрицания класса персонажа ([^.][^g][^i][^t]) также не помогает, потому что есть части пути, которые соответствуют этому регулярному выражению, поэтому путь в любом случае совпадает.

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


Вы могли бы использовать ФАР :: buildFromIterator а затем использовать RecursiveFilterIterator отфильтровать файлы.
Там вы можете определить свой собственный метод сопоставления, который фильтрует правильно.

2

Другие решения

Я видел следующее, используемое для исключения каталогов git с использованием негативной информации:

$phar->buildFromDirectory(__DIR__, '/^((?!\.git).)*$/');

2

По вопросам рекламы [email protected]