如何在执行的 phar 中获取 phar 存档元数据


How to get phar archive meta-data inside of executed phar?

我已经将PHP应用程序打包到可执行的Phar存档中,并在一个类中具有应该访问执行Phar archive元数据的方法。

我可以获取如下所示的元数据,但是这似乎很奇怪,我在执行的Phar archive中加载相同的Phar以获取它的元数据。

那么有没有正确的方法来执行Phar的元数据呢?也许阅读它并在 Phar's Stub 或其他东西中定义它。

<?php
namespace MyPhar;
use 'Phar;
class InsideThePhar {
    public function getPharMetaData() {
        $phar_self = new Phar(Phar::running(false));
        $metadata = $phar_self->getMetadata();
        var_dump($metadata);
        exit();
    }
}

PHP 保留已加载的 phar 文件的缓存,请参阅 http://git.php.net/?p=php-src.git;a=blob;f=ext/phar/phar.c;h=65ebce0f0856fc5a90a62d32dd0bb5c00627706f;hb=HEAD#l96

打开 phar 文件时会使用缓存,因此它不像打开完全不同的 phar 文件那样昂贵。


不,从 PHP 7.2 开始,没有更好的方法来获取当前"正在运行"的 phar 文件的元数据。