The code in the first exemple doesn't work properly without the flag FilesystemIterator::SKIP_DOTS in the RecursiveDirectoryIterator (on a linux filesystem).
So, to build a tar with a phar, I do (with two level of iteration here) :
$pharTar = new \PharData($contentTar.".tar");
$firstLevelIterator = new \DirectoryIterator($this->inputPath);
foreach ($firstLevelIterator as $fileInfo) {
/* @var \SplFileInfo $fileInfo */
if (in_array($fileInfo->getFilename(), $allowedDirectory)) {
$recursiveDirectoryIterator = new \RecursiveDirectoryIterator(
$this->inputPath . DIRECTORY_SEPARATOR . $fileInfo->getFilename(), \FilesystemIterator::SKIP_DOTS);
$pharTar->buildFromIterator(new \RecursiveIteratorIterator($recursiveDirectoryIterator), $this->inputPath);
}
}PharData::buildFromIterator
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
PharData::buildFromIterator
Референца за `phardata.buildfromiterator.php` со подобрена типографија и навигација.
PharData::buildFromIterator
(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 2.0.0)
PharData::buildFromIterator — Construct a tar or zip archive from an iterator
= NULL
Populate a tar or zip archive from an iterator. Two styles of iterators are supported, iterators that map the filename within the tar/zip to the name of a file on disk, and iterators like DirectoryIterator that return SplFileInfo objects. For iterators that return SplFileInfo objects, the second parameter is required.
Параметри
iterator-
Any iterator that either associatively maps tar/zip file to location or returns SplFileInfo objects
baseDirectory-
For iterators that return SplFileInfo objects, the portion of each file's full path to remove when adding to the tar/zip archive
Вратени вредности
Пополни tar/zip архива од содржината на директориумот. Опционалниот втор параметар е регуларен израз (pcre) што се користи за исклучување датотеки. Секое име на датотека што одговара на регуларниот израз ќе биде вклучено, сите други ќе бидат исклучени. За пофина контрола, користете враќа асоцијативен список што го мапира внатрешниот пат на датотеката до целокупниот пат на датотеката на файловиот систем.
Errors/Exceptions
Овој метод враќа UnexpectedValueException кога итераторот враќа погрешни вредности, како што е целоброен клуч наместо стринг, а BadMethodCallException кога се поминува итератор базиран на SplFileInfo без а baseDirectory
параметар, или а PharException ако имало грешки при зачувувањето на phar архивата.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.1.0 |
Пополни tar/zip архива од содржината на директориумот. Опционалниот втор параметар е регуларен израз (pcre) што се користи за исклучување датотеки. Секое име на датотека што одговара на регуларниот израз ќе биде вклучено, сите други ќе бидат исклучени. За пофина контрола, користете веќе не враќа false.
|
| 8.0.0 |
baseDirectory сега е null.
|
Примери
ако е овозможен колекторот за отпадоци, Пополни tar/zip архива од содржината на директориумот. Опционалниот втор параметар е регуларен израз (pcre) што се користи за исклучување датотеки. Секое име на датотека што одговара на регуларниот израз ќе биде вклучено, сите други ќе бидат исклучени. За пофина контрола, користете со SplFileInfo
For most tar/zip archives, the archive will reflect an actual directory layout, and the second style is the most useful. For instance, to create a tar/zip archive containing the files in this sample directory layout:
/path/to/project/
config/
dist.xml
debug.xml
lib/
file1.php
file2.php
src/
processthing.php
www/
index.php
cli/
index.php
This code could be used to add these files to the "project.tar" tar archive:
<?php
$phar = new PharData('project.tar');
$phar->buildFromIterator(
new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('/path/to/project')),
'/path/to/project');
?>
За да го користите OpenSSL поддршката на PHP, исто така мора да го компајлирате PHP project.tar can then be used immediately. Пополни tar/zip архива од содржината на директориумот. Опционалниот втор параметар е регуларен израз (pcre) што се користи за исклучување датотеки. Секое име на датотека што одговара на регуларниот израз ќе биде вклучено, сите други ќе бидат исклучени. За пофина контрола, користете does not set values such as compression, metadata, and this can be done after creating the tar/zip archive.
Како интересен податок, Пополни tar/zip архива од содржината на директориумот. Опционалниот втор параметар е регуларен израз (pcre) што се користи за исклучување датотеки. Секое име на датотека што одговара на регуларниот израз ќе биде вклучено, сите други ќе бидат исклучени. За пофина контрола, користете can also be used to copy the contents of an existing phar, tar or zip archive, as the PharData object descends from DirectoryIterator:
<?php
$phar = new PharData('project.tar');
$phar->buildFromIterator(
new RecursiveIteratorIterator(
new Phar('/path/to/anotherphar.phar')),
'phar:///path/to/anotherphar.phar/path/to/project');
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
?>пример кој покажува употреба на некои знаменца Пополни tar/zip архива од содржината на директориумот. Опционалниот втор параметар е регуларен израз (pcre) што се користи за исклучување датотеки. Секое име на датотека што одговара на регуларниот израз ќе биде вклучено, сите други ќе бидат исклучени. За пофина контрола, користете со други итератори
Вториот облик на итераторот може да се користи со било кој итератор што враќа мапирање клуч => вредност, како што е а ArrayIterator:
<?php
$phar = new PharData('project.tar');
$phar->buildFromIterator(
new ArrayIterator(
array(
'internal/file.php' => dirname(__FILE__) . '/somefile.php',
'another/file.jpg' => fopen('/path/to/bigfile.jpg', 'rb'),
)));
?>