Как создать два одинаковых phar-архива PHP - PullRequest
0 голосов
/ 07 сентября 2018

В настоящее время я пытаюсь распространять программное обеспечение, написанное на PHP, через исполняемый phar-архив. Основная проблема заключается в том, что выходной архив всегда будет иметь другую сумму md5 при последующем создании, даже если исходные файлы не были изменены.

Это вызывает ряд проблем при развертывании приложения с ansible: phar-файл всегда «новый», поэтому невозможно смягчить некоторые действия после развертывания в playbook, даже если содержимое файла фактически не изменилось.

Вот пример сценария, который я использую для создания архива.

<?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-архив из тех же источников и как?

Спасибо!

...