zip из php popen и из командной строки разные результаты - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь предложить скачать весь каталог из apache, используя php Я использую ответ на этот вопрос Zip Stream в PHP

Но когда я сравните (с помощью cksum) загруженный zip-файл и zip-файл, созданный с помощью одной и той же команды из командной строки, результаты различны.

Вот что я делаю из PHP:

<?php
$dir = "/path/to/myfolder";
$ficzip = basename($name) . ".zip";
header('Content-Transfer-Encoding: binary');
header("Content-Type: application/octet-stream");
header('Content-Disposition: attachment; filename="' . $ficzip. '"');
chdir( $dir );
$stream = popen( "/usr/bin/zip -qr -1 - .", "r" );
if( $stream )
{
    fpassthru( $stream );
    fclose( $stream );
}
?>

Вот что я делаю из командной строки:

cd "/path/to/myfolder"
/usr/bin/zip -qr -1 - . > /tmp/myfolder.zip

Я хочу, чтобы оба cksum были одинаковыми, но это не так. Что мне не хватает? Что делать, чтобы они были одинаковыми?

РЕДАКТИРОВАТЬ

Вот разница между zipinfo для обоих файлов (в левом загруженном файле и в правой командной строке файл).

7,9c7,9
<   Zip archive file size:                 248145030 (000000000ECA6486h)
<   Actual end-cent-dir record offset:     248145008 (000000000ECA6470h)
<   Expected end-cent-dir record offset:   248145008 (000000000ECA6470h)
---
>   Zip archive file size:                 248144998 (000000000ECA6466h)
>   Actual end-cent-dir record offset:     248144976 (000000000ECA6450h)
>   Expected end-cent-dir record offset:   248144976 (000000000ECA6450h)
16c16
<   is 248144779 (000000000ECA638Bh).
---
>   is 248144747 (000000000ECA636Bh).
31c31
<   compression sub-type (deflation):               normal
---
>   compression sub-type (deflation):               fast
33c33
<   extended local header:                          yes
---
>   extended local header:                          no
59,60d58
<   There are an extra 16 bytes preceding this file.
< 
63,64c61,62
<   offset of local header from start of archive:   248143809
<                                                   (000000000ECA5FC1h) bytes
---
>   offset of local header from start of archive:   248143793
>                                                   (000000000ECA5FB1h) bytes
70c68
<   compression sub-type (deflation):               normal
---
>   compression sub-type (deflation):               fast
72c70
<   extended local header:                          yes
---
>   extended local header:                          no

EDIT2

, заменив -1 для самого быстрого сжатия на -Z store, если не сжатие уменьшает различия, но все еще не в порядке.

7,9c7,9
<   Zip archive file size:                 249693306 (000000000EE2047Ah)
<   Actual end-cent-dir record offset:     249693284 (000000000EE20464h)
<   Expected end-cent-dir record offset:   249693284 (000000000EE20464h)
---
>   Zip archive file size:                 249693274 (000000000EE2045Ah)
>   Actual end-cent-dir record offset:     249693252 (000000000EE20444h)
>   Expected end-cent-dir record offset:   249693252 (000000000EE20444h)
16c16
<   is 249693055 (000000000EE2037Fh).
---
>   is 249693023 (000000000EE2035Fh).
32c32
<   extended local header:                          yes
---
>   extended local header:                          no
58,59d57
<   There are an extra 16 bytes preceding this file.
< 
62,63c60,61
<   offset of local header from start of archive:   249690256
<                                                   (000000000EE1F890h) bytes
---
>   offset of local header from start of archive:   249690240
>                                                   (000000000EE1F880h) bytes
70c68
<   extended local header:                          yes
---
>   extended local header:                          no

Решение

Вот команда, которую я использую для получения идентичных результатов. Я держу вопрос открытым, чтобы кто-то мог объяснить различия между выполнением команды popen и Terminal.

/usr/bin/zip -qr -0 -fd -fz- - .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...