2

我正在尝试用我的一个库制作一个 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 中的文件第 9 行 D:\wamp\www_test\phar\lib.phar 中的“D:/wamp/www/_test/phar/lib.phar”

如何制作一个没有任何 index.php 文件的 phar 存档?事实上,我只需要存档成为我的文件的容器,不需要自动执行任何东西。

4

1 回答 1

1

首先,我认为你必须startBuffering()之前stopBuffering()。我可能认为这buildFromDirectory在内部为您完成了这项工作。您不需要stopBuffering()为“密封”档案做任何事情。它准备好“在飞行中”。

所以第二个:您可以像这样观看 defaultStub (在您的代码中隐式使用):

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

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

于 2011-11-03T08:13:22.110 回答