[英]Minimal PHP Phar stub
我正在尝试为我的框架扩展机制。 每个模块至少包含一个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将仅用于将特定于模块的文件捆绑在一起并将包含在框架中 - 在此上下文中独立运行将没有任何意义。 我想我的问题是,我错过了什么 - 如果有的话 - 使用最小的存根代码? 为什么压缩版本总是相同的大小?
我想我的问题是,我错过了什么 - 如果有的话 - 使用最小的存根代码?
在文件格式文档中 ,默认存根描述为:
基于phar的Phar存档的默认存根包含大约7k的代码,用于提取phar的内容并执行它们。
然后它指向Phar :: createDefaultStub ,它说:
此方法提供了一种简单易用的方法来创建将从phar存档运行启动文件的存根。 此外,可以指定不同的文件,以便从命令行运行phar存档,而不是通过Web服务器运行。 加载器存根还调用Phar :: interceptFileFuncs()以允许轻松捆绑访问文件系统的PHP应用程序。 如果没有phar扩展,则加载程序存根将phar存档提取到临时目录,然后对文件进行操作。 关闭功能会在退出时删除临时文件。
强调补充,因为这是默认存根如此之大的原因。 如果你可以假设你总是在PHP 5.3或更高版本下运行,你可能不需要默认的存根,并且可以坚持使用最小的__HALT_COMPILER
为什么压缩版本总是相同的大小?
再次潜入文件格式文档, 存档格式之间进行了比较 ,这解释了Phar执行每个文件和整个存档压缩。 您可能会看到类似的压缩大小,因为gzip无法进一步压缩数据。 这是猜测。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.