<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/filters.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'uk',
  ),
  'this' => 
  array (
    0 => 'filters.compression.php',
    1 => 'Фільтри для стиснення',
    2 => 'Фільтри для стиснення',
  ),
  'up' => 
  array (
    0 => 'filters.php',
    1 => 'Список доступних фільтрів',
  ),
  'prev' => 
  array (
    0 => 'filters.convert.php',
    1 => 'Фільтри перетворення',
  ),
  'next' => 
  array (
    0 => 'filters.encryption.php',
    1 => 'Шифрувальні фільтри',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'uk',
    'path' => 'appendices/filters.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="filters.compression" class="section">
  <h2 class="title">Фільтри для стиснення</h2>

  <p class="simpara">
   Оскільки <a href="wrappers.compression.php" class="link">обгортки для стиснення</a>
   надають спосіб створення gzip— і bz2—сумісних файлів в локальній файловій
   системі, вони не надають засоби для загального стиснення мережевих
   потоків або переведення не стисненого потоку в стиснений. Натомість фільтр
   для стиснення може застосовуватися до будь-якого ресурсу потоку в будь-який
   час.
  </p>

  <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
   <span class="simpara">
    Фільтри для стиснення <em>не</em> генерують заголовки чи
    закінчення, використовуючи утиліти командного рядка, такі як
    <code class="literal">gzip</code>. Вони лише стискають і розтискають потрібні порції
    даних потоку.
   </span>
  </p></blockquote>

  <div class="section" id="filters.compression.zlib">
   <h2 class="title">zlib.deflate та zlib.inflate</h2>
   <p class="simpara">
    <code class="literal">zlib.deflate</code> (стиснення) та
    <code class="literal">zlib.inflate</code> (розтиснення) є реалізаціями методів для
    стиснення, описаних у <a href="https://datatracker.ietf.org/doc/html/rfc1951" class="link external">&raquo;&nbsp;RFC 1951</a>.
    Фільтр <code class="literal">deflate</code> приймає до трьох параметрів, що
    передаються як асоціативний масив.

    <code class="parameter">level</code> вказує силу стиснення числом від 1 до 9. Вищі
    числа, як правило, означатимуть стиснення даних до менший розміру, що
    коштуватиме додаткового процесорного часу. Також існують два спеціальні
    рівні стиснення: 0 (взагалі без стиснення) і -1 (звичайний внутрішній для
    zlib — зараз 6).

    <code class="parameter">window</code> це двійковий логарифм розміру вікна петлі
    стиснення. Вищі значення (до 15 — 32768 байтів) дають краще стиснення,
    використовуючи більше пам&#039;яті, коли нижчі значення (менше 9 — 512 байтів)
    — гірше стиснення при меншому обсязі пам&#039;яті. Початково параметр
    <code class="parameter">window</code> дорівнює <code class="literal">15</code>.

    <code class="parameter">memory</code> є шкалою, що визначає, скільки пам&#039;яті для
    роботи повинно бути виділено. Діапазон допустимих значень від 1
    (мінімальна кількість пам&#039;яті) до 9 (максимум). Це виділення пам&#039;яті
    впливає лише на швидкість, а не на розмір згенерованих даних.
   </p>

   <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
    <span class="simpara">
     Оскільки рівень стиснення є найбільш використовуваним параметром, він
     натомість може задаватися, як просте числове значення (замість елемента
     масиву).
    </span>
   </p></blockquote>

   <p class="simpara">
    Фільтри стиснення zlib.* є доступними, якщо увімкнена підтримка
    <a href="ref.zlib.php" class="link">zlib</a>.
   </p>

   <div class="example" id="example-1">
    <p><strong>Приклад #1 
     <code class="literal">zlib.deflate</code> та
     <code class="literal">zlib.inflate</code>
    </strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$params </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'level' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">6</span><span style="color: #007700">, </span><span style="color: #DD0000">'window' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">15</span><span style="color: #007700">, </span><span style="color: #DD0000">'memory' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">9</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$original_text </span><span style="color: #007700">= </span><span style="color: #DD0000">"Це тест.\nЦе тільки тест.\nЦе неважливий рядок.\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Початковий текст містить " </span><span style="color: #007700">. </span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$original_text</span><span style="color: #007700">) . </span><span style="color: #DD0000">" символ(ів).\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$fp </span><span style="color: #007700">= </span><span style="color: #0000BB">fopen</span><span style="color: #007700">(</span><span style="color: #DD0000">'test.deflated'</span><span style="color: #007700">, </span><span style="color: #DD0000">'w'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">stream_filter_append</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #DD0000">'zlib.deflate'</span><span style="color: #007700">, </span><span style="color: #0000BB">STREAM_FILTER_WRITE</span><span style="color: #007700">, </span><span style="color: #0000BB">$params</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">fwrite</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #0000BB">$original_text</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">fclose</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">);<br /><br />echo </span><span style="color: #DD0000">"Стиснений файл має " </span><span style="color: #007700">. </span><span style="color: #0000BB">filesize</span><span style="color: #007700">(</span><span style="color: #DD0000">'test.deflated'</span><span style="color: #007700">) . </span><span style="color: #DD0000">" байт(ів).\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Початковий текст був:\n"</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">/* Для розтиснення на льоту використовується функція readfile та фільтр zlib.inflate */<br /></span><span style="color: #0000BB">readfile</span><span style="color: #007700">(</span><span style="color: #DD0000">'php://filter/zlib.inflate/resource=test.deflated'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">/* Генерує вивід:<br /><br />Початковий текст містить 81 символ(ів).<br />Стиснений файл має 72 байт(ів).<br />Початковий текст був:<br />Це тест.<br />Це тільки тест.<br />Це неважливий рядок.<br /><br /> */<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <div class="example" id="example-2">
    <p><strong>Приклад #2 
     Простий <code class="literal">zlib.deflate</code>
    </strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$original_text </span><span style="color: #007700">= </span><span style="color: #DD0000">"Це тест.\nЦе тільки тест.\nЦе неважливий рядок.\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Початковий текст має " </span><span style="color: #007700">. </span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$original_text</span><span style="color: #007700">) . </span><span style="color: #DD0000">" символ(ів).\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$fp </span><span style="color: #007700">= </span><span style="color: #0000BB">fopen</span><span style="color: #007700">(</span><span style="color: #DD0000">'test.deflated'</span><span style="color: #007700">, </span><span style="color: #DD0000">'w'</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">/* "6" — вказує рівень стиснення */<br /></span><span style="color: #0000BB">stream_filter_append</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #DD0000">'zlib.deflate'</span><span style="color: #007700">, </span><span style="color: #0000BB">STREAM_FILTER_WRITE</span><span style="color: #007700">, </span><span style="color: #0000BB">6</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">fwrite</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #0000BB">$original_text</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">fclose</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">);<br /><br />echo </span><span style="color: #DD0000">"Стиснений файл має " </span><span style="color: #007700">. </span><span style="color: #0000BB">filesize</span><span style="color: #007700">(</span><span style="color: #DD0000">'test.deflated'</span><span style="color: #007700">) . </span><span style="color: #DD0000">" байт(ів).\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">/* Генерує вивід:<br /><br />Початковий текст має 81 символ(ів).<br />Стиснений файл має 66 байт(ів).<br /><br /> */<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </div>

  <div class="section" id="filters.compression.bzip2">
   <h2 class="title">bzip2.compress та bzip2.decompress</h2>
   <p class="simpara">
    <code class="literal">bzip2.compress</code> та
    <code class="literal">bzip2.decompress</code>
    виконують роботу, схожу зі zlib-фільтрами, як описано вище.

    Фільтр <code class="literal">bzip2.compress</code> приймає до двох параметрів у
    вигляді асоціативного масиву: 

    <code class="parameter">blocks</code> — це ціле число від 1 до 9 визначає
    кількість блоків пам&#039;яті розміром у 100кБ, яку потрібно виділити для
    роботи. 

    <code class="parameter">work</code> — це також ціле число в діапазоні від 0 до
    250, яке вказує, скільки зусиль потрібно витратити, використовуючи
    звичайний метод стиснення, перш ніж повернутися до повільнішого, але
    надійнішого методу. Використання цього параметру впливає лише на швидкість
    стиснення. Цей параметр не змінює ані розмір стисненого виводу, ані
    використання пам’яті. Коефіцієнт роботи 0 вказує використовувати внутрішнє
    стандартне значення бібліотеки bzip.   

    Фільтр <code class="literal">bzip2.decompress</code> приймає лиш один параметр,
    якому задається звичайне логічне значенням або елемент
    <code class="parameter">small</code> асоціативного масиву.

    Коли <code class="parameter">small</code> має значення <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>, бібліотека bzip
    виконує розстиснення, використовуючи найменше пам&#039;яті, проте повільно.
   </p>

   <p class="simpara">
     Фільтри стиснення bzip2.* доступні, якщо увімкнена підтримка
     <a href="ref.bzip2.php" class="link">bz2</a>.
   </p>

   <div class="example" id="example-3">
    <p><strong>Приклад #3 
     <code class="literal">bzip2.compress</code> та
     <code class="literal">bzip2.decompress</code>
    </strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$param </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'blocks' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">9</span><span style="color: #007700">, </span><span style="color: #DD0000">'work' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">0</span><span style="color: #007700">);<br /><br />echo </span><span style="color: #DD0000">"Початковий файл має " </span><span style="color: #007700">. </span><span style="color: #0000BB">filesize</span><span style="color: #007700">(</span><span style="color: #DD0000">'LICENSE'</span><span style="color: #007700">) . </span><span style="color: #DD0000">" байт(ів).\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$fp </span><span style="color: #007700">= </span><span style="color: #0000BB">fopen</span><span style="color: #007700">(</span><span style="color: #DD0000">'LICENSE.compressed'</span><span style="color: #007700">, </span><span style="color: #DD0000">'w'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">stream_filter_append</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #DD0000">'bzip2.compress'</span><span style="color: #007700">, </span><span style="color: #0000BB">STREAM_FILTER_WRITE</span><span style="color: #007700">, </span><span style="color: #0000BB">$param</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">fwrite</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">'LICENSE'</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">fclose</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">);<br /><br />echo </span><span style="color: #DD0000">"Стиснений файл має " </span><span style="color: #007700">. </span><span style="color: #0000BB">filesize</span><span style="color: #007700">(</span><span style="color: #DD0000">'LICENSE.compressed'</span><span style="color: #007700">) . </span><span style="color: #DD0000">" байт(ів).\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">/* Генерує вивід:<br /><br />Початковий файл має 3288 байт(ів).<br />Стиснений файл 1488 байт(ів).<br /><br /> */<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </div>
  </div><?php manual_footer($setup); ?>