我正在尝试使用我的一个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存档?实际上我只需要将存档作为我文件的容器,不需要自动执行任何操作。
答案 0 :(得分:1)
首先,我认为你必须在startBuffering()
之前stopBuffering()
。我可能会认为buildFromDirectory
在内部为您做这件事。
您无需stopBuffering()
来“密封”存档。它准备好“在飞行中”。
所以第二:您可以观看defaultStub(在代码隐含中使用),如下所示:
$phar->setDefaultStub();
var_dump($phar->getStub());
它有点神秘,但你会明白的。它确实检查了phar流包装器支持(在5.3中),如果没有,它将内容提取到临时文件,然后执行Phar::START
常量文件 - 默认为“index.php”。当然它确实Phar::interceptFileFuncs()
并设置包含路径,这使得phar工作“神奇”。但你的问题听起来像你只需要一个档案库。所以你最好使用“PharData”类。尚未尝试过,但文档说明了这一点。