развертывание — Упаковка приложения PHP

Я пытаюсь создать файл .phar из моего веб-приложения. После пример документации php Я попробовал следующее для этой цели.

<?php
$srcRoot = __DIR__ . "/../app";
$buildRoot = __DIR__ . "/../build";
$p = new Phar("$buildRoot/build.phar", 0, 'build.phar');
$p->buildFromIterator(
new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($srcRoot)
),
$srcRoot
);

Однако я получил следующую ошибку. Я не имею ни малейшего представления об ошибке. Что не так с кодом?

PHP Fatal error:  Uncaught exception 'UnexpectedValueException' with message
'Iterator RecursiveIteratorIterator returned a path "D:\site\app" that is
not in the base directory "D:\site\app"'
in D:\site\tools\create-phar.php:7

4

Решение

Источник проблемы в том, что RecursiveDirectoryIterator также перечисляет точечные файлы — . а также ..,
При переборе /path/to/foo это также перечисляет /path/to/foo/. а также /path/to/foo/.. который идет в родительский каталог — за пределами базового каталога.

Таким образом, вы должны предотвратить включение файлов «..», чего легче всего добиться с FilesystemIterator::SKIP_DOTS в качестве второго параметра DirectoryIterator:

new RecursiveDirectoryIterator($srcRoot, FilesystemIterator::SKIP_DOTS)
5

Другие решения

(@cweiske — я только что понял, что ты меня побил, я обязательно обновлю страницу в следующий раз, мои искренние извинения!)

Вам нужно всего лишь небольшое редактирование, чтобы пропустить пути Unix /. а также /..:

<?php
$srcRoot = __DIR__ . "/../app";
$buildRoot = __DIR__ . "/../build";
$p = new Phar("$buildRoot/build.phar", 0, 'build.phar');
$p->buildFromIterator(
new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($srcRoot, FilesystemIterator::SKIP_DOTS)
),
$srcRoot
);
2

коробка позволяет очень легко создавать архивы PHAR из ваших исходных файлов. Обычно вы сначала добавляете файл конфигурации, а затем можете создать свой файл PHAR, просто вызвав box build в командной строке.

Eсть отличный пост в блоге Matthieu Moquet, описывающий, как он использовал Box, чтобы упростить распространение приложения PHP Cli. Лично я также использовал Box для приложения CLI, однако официальное описание проекта не ограничивается приложениями CLI, а скорее обобщает проект Box следующим образом:

Приложение для создания и управления Phars.

Проект Box предоставляет скрипт сборки PHAR и заботится о правильной настройке всех путей, так что это может решить вашу проблему.

0

Взгляните на файл php.ini, чтобы проверить значение поля phar.readonly.
Должно быть 0 для создания архива phar.

Ref: http://php.net/manual/en/phar.configuration.php#ini.phar.readonly

-1
По вопросам рекламы [email protected]