Я хотел бы поместить файл phar в файл phar. Я попробовал это самым прямым образом:
$p = new Phar('test.phar', null, 'self.phar');
$p->setStub('<?php Phar::mapPhar();
include \'phar://self.phar/index.php\'; __HALT_COMPILER(); ?>');
$p['index.php'] = '<?php
echo "hello world\n";';
$p = new Phar('test2.phar', null, 'self.phar');
$p->setStub('<?php Phar::mapPhar();
include \'phar://self.phar/index.php\'; __HALT_COMPILER(); ?>');
$p['index.php'] = '<?php
echo "hello phar world\n";';
$p['test.phar'] = file_get_contents('test.phar');
Однако PHP просто не хочет его открывать. Он не принимает ничего из следующего, включая:
// Warning: Phar::mapPhar(phar://path/to/test2.phar/test.phar): failed to open
// stream: Invalid argument in phar://path/to/test2.phar/test.phar
include('phar://test2.phar/test.phar');
// Warning: include(phar://test2.phar/test.phar/index.php): failed to open
// stream: phar error: "test.phar/index.php" is not a file in phar "test2.phar"
include('phar://test2.phar/test.phar/index.php');
// Warning: include(phar://test2.phar/phar://test.phar/index.php): failed to
// open stream: phar error: "phar:/test.phar/index.php" is not a file in phar
// "test2.phar"
include('phar://test2.phar/phar://test.phar/index.php');
Я знаю, что конструктивность этого вопроса ограничена, потому что он может просто не работать с phar-in-phar, однако, вероятно, я просто упустил способ, как это сделать, и я просто не вижу леса за деревьями.
phar://
, которую я хотел бы использовать здесь. Создание экземпляраPhar
и считывание содержимого файла должно работать. Затем включение черезdata://
может сработать, но для этого необходимо включить удаленное включение файлов. - person hakre   schedule 01.11.2012Phar::mapPhar();
в первой заглушке. - person hakre   schedule 01.11.2012Phar::extractTo
- person wesside   schedule 01.11.2012phar:://
может обрабатывать phar-файлы. Но сейчас нужно прояснить, что внутри файла phar есть файл phar. - person hakre   schedule 01.11.2012Phar::loadPhar('/test2.phar/test.phar', 'sub.phar');
может быть?include('phar://sub.phar');
- person wesside   schedule 01.11.2012