В настоящее время я пытаюсь распространять программное обеспечение, написанное на 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-архив из тех же источников и как?
Спасибо!