我目前正在为我的框架试验一种扩展机制。每个模块至少包含一个 PHP 文件(定义一个类)和一个 XSL 样式表,但可能会涉及到其他几个文件,所以我立即想到了使用 Phars。
一切都很好地结合在一起,但我注意到如果我不使用createDefaultStub()
而是按照以下代码片段构建 Phar,那么结果是大小的四分之一 - 并且比压缩版本小。
$phar = new Phar('Example.phar', 0, 'Example.phar');
$phar->buildFromDirectory(__DIR__ . '/src');
$phar->setStub('<?php __HALT_COMPILER();');
$phar->setSignatureAlgorithm(Phar::SHA256);
$phar->compress(Phar::GZ);
示例文件大小:
8799 14 Dec 09:37 ExampleCog.phar (using createDefaultStub())
2143 14 Dec 10:08 ExampleCog.phar (using __HALT_COMPILER())
3373 14 Dec 10:08 ExampleCog.phar.gz (consistent with either method)
Phar 将仅用于将特定于模块的文件捆绑在一起,并将包含在框架中——在这种情况下独立运行没有任何意义。我想我的问题是,我错过了什么——如果有的话——使用最小的存根代码?为什么压缩版本总是一样的大小?