如何创建两个相同的PHP Phar归档文件

时间:2018-09-07 10:08:27

标签: php phar

我目前正在尝试通过可执行的phar-archive分发用PHP编写的软件。主要问题是,即使未修改源文件,输出存档在后续创建中始终具有不同的md5和。

这在部署带有ansible的应用程序时会导致多个问题:phar-file始终是“新的”,因此即使文件内容实际上未更改,也无法减轻剧本中的某些部署后操作。

这是我用来创建存档的示例脚本。

<?php

$phar_file = 'out.phar';

$src = [ '1.php', '2.php' ];
$stub = <<<EOF
#!/usr/bin/php
<?php
Phar::mapPhar('{$phar_file}');
include 'phar://{$phar_file}/1.php';
__HALT_COMPILER();
EOF;

@unlink($phar_file);

$p = new Phar($phar_file);

$p->startBuffering();

foreach ($src as $f) {
        $p->addFile($f);
}

$p->setStub($stub);

$p->stopBuffering();

让我们尝试一下:

# php7 create-phar.php 
# md5sum out.phar
5e0cdadb7953af4f1a67a2a0852e3a85  out.phar
# php7 create-phar.php 
# md5sum out.phar
4c97e3f67cf6f168c317235bc18299ea  out.phar

Cmp告诉您,标头中有两个两个字节被更改,签名也不同:

# cmp -l out.phar out.phar.old 
 140 157 120
 173 157 120
3721 163 236
3722   5 235
3723 247 137
3724 246 160
3725 267 145
3726  52 174
3727 366 230
3728  22 322
3729  34 357
3730  45 176
3731  53  62
3732 130 142
3733 276 110
3734  20 252
3735 176 151
3736 134 105
3737 236   3
3738  62  16
3739 334 142
3740 176 244

是否可以从相同的来源创建二进制等价的phar归档?

谢谢!

0 个答案:

没有答案