我目前正在尝试通过可执行的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归档?
谢谢!