Как создать архив Phar без индекса? - PullRequest
2 голосов
/ 21 октября 2011

Я пытаюсь сделать архив Phar с одним из моих lib.Библиотека - это просто набор классов, организованных в папки и подпапки.Здесь нет index.php, просто статический класс Config для вызова автозагрузчика.

В любом случае, я построил архив следующим образом:

$phar = new Phar(__DIR__ . '/lis.phar',0,'lib.phar');
$phar->buildFromDirectory(__DIR__ . '/class','/\.php$');
$phar->stopBuffering();

После этого я пытаюсьиспользовать phar следующим образом:

require('lib.phar');
Config::register(); // Config is in the phar

Но я получаю следующую ошибку:

Предупреждение: include (phar: // D: \ wamp \ www_test \ phar \ lib.phar / index.php) [function.include]: не удалось открыть поток: phar ошибка: «index.php» не является файлом в phar «D: /wamp/www/_test/phar/lib.phar» в D: \ wamp \ www_test \ phar \ lib.phar в строке 9

Как создать архив phar без файла index.php внутри него?На самом деле мне просто нужно, чтобы архив был контейнером для моих файлов, нет необходимости автоматически выполнять что-либо.

1 Ответ

1 голос
/ 03 ноября 2011

Прежде всего, я думаю, что вы должны startBuffering() до stopBuffering().И я могу подумать, что buildFromDirectory делает это внутренне для вас.Вам не нужно делать stopBuffering() для "запечатывания" архива.Он готов "на лету".

Итак, во-вторых: Вы можете посмотреть defaultStub (который используется в вашей простоте кода) следующим образом:

$phar->setDefaultStub();
var_dump($phar->getStub());

Это немного загадочно, ноВы поймете это.Он проверяет поддержку оболочки потока phar (в 5.3) и, если нет, извлекает содержимое во временный файл, а затем выполняет константный файл Phar::START, который по умолчанию является «index.php».И, конечно, он делает Phar::interceptFileFuncs() и устанавливает путь включения, что делает phar работающим «магическим».Но ваш вопрос звучит так, будто вам нужен только архив для ваших библиотек.Так что вам лучше использовать класс "PharData".Еще не пробовал, но в документации так сказано.

...