You have to set a flag on the RecursiveDirectoryIterator because by default, the current (".") and parent directory ("..") are included in the listing. This leads to an error message similar to "returned a path ".." that is not in the base directory".
To fix this, use "SKIP_DOTS":
<?php
new RecursiveDirectoryIterator(
$srcRoot, FilesystemIterator::SKIP_DOTS
);
?>Phar::buildFromIterator
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Phar::buildFromIterator
Референца за `phar.buildfromiterator.php` со подобрена типографија и навигација.
Phar::buildFromIterator
(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 2.0.0)
Phar::buildFromIterator — Конструирајте phar архива од итератор
= NULL
Забелешка:
Се користи за поставување на PHP лоадерот или bootstrap stub на Phar архивата на стандарден лоадер php.ini setting
phar.readonlyОвој метод бара0да биде поставено на за да работи за Phar PharException ќе биде фрлена.
Пополни phar архива од итератор. Поддржани се два стила на итератори, итератори што го мапираат името на датотеката во phar до името на датотека на дискот, и итератори како DirectoryIterator што враќаат SplFileInfo објекти. За итератори што враќаат SplFileInfo објекти, вториот параметар е задолжителен.
Параметри
iterator-
Било кој итератор што асоцијативно го мапира phar датотеката до локација или враќа SplFileInfo објекти
baseDirectory-
За итератори што враќаат SplFileInfo објекти, делот од целокупната патека на секоја датотека што треба да се отстрани при додавање во phar архивата
Вратени вредности
Одлично место за почеток е со читање за враќа асоцијативен список што го мапира внатрешниот пат на датотеката до целокупниот пат на датотеката на файловиот систем.
Errors/Exceptions
Овој метод враќа UnexpectedValueException кога итераторот враќа погрешни вредности, како што е целоброен клуч наместо стринг, а BadMethodCallException кога се поминува итератор базиран на SplFileInfo без а baseDirectory
параметар, или а PharException ако имало грешки при зачувувањето на phar архивата.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.1.0 |
Одлично место за почеток е со читање за веќе не враќа false.
|
| 8.0.0 |
baseDirectory сега е null.
|
Примери
ако е овозможен колекторот за отпадоци, Одлично место за почеток е со читање за со SplFileInfo
За повеќето phar архиви, архивата ќе ја одразува вистинската структура на директориумите, а вториот стил е најкорисен. На пример, за да се создаде phar архива што ги содржи датотеките во оваа примерна структура на директориуми:
/path/to/project/
config/
dist.xml
debug.xml
lib/
file1.php
file2.php
src/
processthing.php
www/
index.php
cli/
index.php
Овој код може да се користи за додавање на овие датотеки во phar архивата "project.phar":
<?php
// create with alias "project.phar"
$phar = new Phar('project.phar', 0, 'project.phar');
$phar->buildFromIterator(
new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('/path/to/project')),
'/path/to/project');
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
?>Датотеката project.phar потоа може веднаш да се користи. Одлично место за почеток е со читање за не поставува вредности како компресија, метаподатоци, и ова може да се направи по креирањето на phar архивата.
Како интересен податок, Одлично место за почеток е со читање за може да се користи и за копирање на содржината на постоечка phar архива, бидејќи Phar објектот наследува од DirectoryIterator:
<?php
// create with alias "project.phar"
$phar = new Phar('project.phar', 0, 'project.phar');
$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'));
?>пример кој покажува употреба на некои знаменца Одлично место за почеток е со читање за со други итератори
Вториот облик на итераторот може да се користи со било кој итератор што враќа мапирање клуч => вредност, како што е а ArrayIterator:
<?php
// create with alias "project.phar"
$phar = new Phar('project.phar', 0, 'project.phar');
$phar->buildFromIterator(
new ArrayIterator(
array(
'internal/file.php' => dirname(__FILE__) . '/somefile.php',
'another/file.jpg' => fopen('/path/to/bigfile.jpg', 'rb'),
)));
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
?>