如何创建没有索引的Phar存档?

时间:2011-10-21 13:28:38

标签: php phar

我正在尝试使用我的一个lib创建一个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”中的文件   第9行的D:\ wamp \ www_test \ phar \ lib.phar

如何在没有任何index.php文件的情况下制作phar存档?实际上我只需要将存档作为我文件的容器,不需要自动执行任何操作。

1 个答案:

答案 0 :(得分:1)

首先,我认为你必须在startBuffering()之前stopBuffering()。我可能会认为buildFromDirectory在内部为您做这件事。 您无需stopBuffering()来“密封”存档。它准备好“在飞行中”。

所以第二:您可以观看defaultStub(在代码隐含中使用),如下所示:

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

它有点神秘,但你会明白的。它确实检查了phar流包装器支持(在5.3中),如果没有,它将内容提取到临时文件,然后执行Phar::START常量文件 - 默认为“index.php”。当然它确实Phar::interceptFileFuncs()并设置包含路径,这使得phar工作“神奇”。但你的问题听起来像你只需要一个档案库。所以你最好使用“PharData”类。尚未尝试过,但文档说明了这一点。