Я хочу создать архив tar в сценарии PHP, используя встроенный PharData
учебный класс.
Я хочу, чтобы архив tar представлял каталог, поэтому я подумал об использовании PharData::buildFromDirectory()
сделать это. К сожалению, каталог также является git-репозиторием и имеет .git
папка в нем, которая намного больше, чем сама директория.
Так что мне нужно удалить это .git
каталог (в идеале также .idea
каталог …) из архива, потому что это будет раздувать его без необходимости.
Что я пробовал до сих пор:
Использование регулярного выражения для фильтрации каталога:
$archive->buildFromDirectory("..", "@^(?!.git).+@");
Который не работал.
С помощью PharData::delete()
, но, к сожалению, кажется, что удалить только файл, а не каталог.
Итак, как лучше всего делать то, что я хочу?
Проблема с вашим регулярным выражением в том, что полный путь файла соответствует, не только каталог (базовое имя). Таким образом, вы не можете отфильтровать .git
сам каталог.
Использование отрицания класса персонажа ([^.][^g][^i][^t]
) также не помогает, потому что есть части пути, которые соответствуют этому регулярному выражению, поэтому путь в любом случае совпадает.
Это означает, что вы можете использовать только положительные совпадения.
Вы могли бы использовать ФАР :: buildFromIterator а затем использовать RecursiveFilterIterator отфильтровать файлы.
Там вы можете определить свой собственный метод сопоставления, который фильтрует правильно.
Я видел следующее, используемое для исключения каталогов git с использованием негативной информации:
$phar->buildFromDirectory(__DIR__, '/^((?!\.git).)*$/');