我已将PHP应用程序打包到可执行的Phar存档中,并且在一个Class内部有一个方法,该方法应该访问已执行的Phar archive
元数据。
我可以获得如下所示的元数据,但是为了获得它的元数据,我在执行的Phar
中加载相同的Phar archive
似乎很奇怪。
那么正确的方式是如何获得执行Phar的元数据的?也许阅读并定义在Phar的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();
}
}
答案 0 :(得分:1)
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文件的元数据。