На сервере пакую данные для вставки в клиенте в ZIP-файл без перепаковки.
Использую также прозрачный фильтр от horde ( см.
https://apt-browse.org/browse/ubuntu/trusty/universe/all/php-horde-stream-filter/2.0.2-1/file/usr/share/php/Horde/Stream/Filter/Crc32.php ) для подсчёта контрольной суммы и аналогичные тривиальные фильтры для подсчёта размера до и после паковки ( lenfilter.php ):
require_once "horde-crc32.php";
require_once "lenfilter.php";
@ini_set('output_buffering', 0);
stream_filter_register("len_filter", "Length_Stream_Filter");
stream_filter_register("horde_crc32", "Horde_Stream_Filter_Crc32");
$params_crc = new stdClass;
$params_len_before = new stdClass;
$params_len_after = new stdClass;
$f = fopen('php://output', 'w');
stream_filter_append($f, "horde_crc32", STREAM_FILTER_WRITE, $params_crc);
stream_filter_append($f, "len_filter", STREAM_FILTER_WRITE, $params_len_before);
stream_filter_append($f, "zlib.deflate",STREAM_FILTER_WRITE);
stream_filter_append($f, "len_filter", STREAM_FILTER_WRITE, $params_len_after);
… вывод данных в $f …
fflush($f);
fclose($f);
$format = "N"; // unsigned long (always 32 bit, big endian byte order)
echo pack($format, $params_len_after->length );
echo pack($format, $params_len_before->length );
echo pack($format, $params_crc->crc32 );
Проблема: работает очень медленно, ест CPU (сервер быстрый).
Может это из-за того, что использую много фильтров?
Есть ли возможность получить размеры до и/или после сжатия иным способом (например из стандартного фильтра zlib.deflate ?
Кто что посоветует ?