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 — (PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 2.0.0)
= NULL
$iterator, ?string $baseDirectory = null): arrayКонструирајте tar или zip архива од итератор
Параметри
iterator-
Пополни tar или zip архива од итератор. Поддржани се два стила на итератори, итератори кои го мапираат името на датотеката во tar/zip до името на датотека на дискот, и итератори како DirectoryIterator кои враќаат објекти SplFileInfo. За итератори кои враќаат објекти SplFileInfo, вториот параметар е задолжителен.
baseDirectory-
Било кој итератор што асоцијативно го мапира tar/zip името на датотеката до локација или враќа објекти SplFileInfo
Вратени вредности
Пополни 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
За итератори кои враќаат објекти SplFileInfo, делот од целокупната патека на секоја датотека што треба да се отстрани при додавање во tar/zip архивата
/path/to/project/
config/
dist.xml
debug.xml
lib/
file1.php
file2.php
src/
processthing.php
www/
index.php
cli/
index.php
За повеќето tar/zip архиви, архивата ќе ја одразува вистинската структура на директориумите, а вториот стил е најкорисен. На пример, за да се создаде tar/zip архива што ги содржи датотеките во овој распоред на директориуми од примерок:
<?php
$phar = new PharData('project.tar');
$phar->buildFromIterator(
new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('/path/to/project')),
'/path/to/project');
?>
За да го користите OpenSSL поддршката на PHP, исто така мора да го компајлирате PHP project.tar Овој код може да се користи за додавање на овие датотеки во tar архивата "project.tar": Пополни tar/zip архива од содржината на директориумот. Опционалниот втор параметар е регуларен израз (pcre) што се користи за исклучување датотеки. Секое име на датотека што одговара на регуларниот израз ќе биде вклучено, сите други ќе бидат исклучени. За пофина контрола, користете може веднаш да се користи.
Како интересен податок, Пополни tar/zip архива од содржината на директориумот. Опционалниот втор параметар е регуларен израз (pcre) што се користи за исклучување датотеки. Секое име на датотека што одговара на регуларниот израз ќе биде вклучено, сите други ќе бидат исклучени. За пофина контрола, користете не поставува вредности како компресија, метаподатоци, и ова може да се направи по креирањето на tar/zip архивата. 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'),
)));
?>