PHP.mk документација

Филтри за компресија

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

filters.compression.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека filters.compression.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
Филтри за компресија

Референца за `filters.compression.php` со подобрена типографија и навигација.

filters.compression.php

Филтри за компресија

Додека Компресирани обвивки обезбедуваат начин за креирање датотеки компатибилни со gzip и bz2 на локалниот датотечен систем, тие не обезбедуваат средство за општа компресија преку мрежни потоци, ниту пак обезбедуваат средство за започнување со некомпресиран поток и преминување кон компресиран. За ова, филтер за компресија може да се примени на кој било ресурс од поток во секое време.

Забелешка: Филтрите за компресија прават not генерираат заглавја и опашки што ги користат комунални услуги од командната линија како што се gzip. Тие само компресираат и декомпресираат делови од корисниот товар на компресирани потоци на податоци.

zlib.deflate и zlib.inflate

zlib.deflate (компресија) и zlib.inflate (декомпресија) се имплементации на методите за компресија опишани во » RFC 1951ќе треба да се прилагоди, и deflate филтерот зема до три параметри предадени како асоцијативен низ. level ја опишува јачината на компресија што треба да се користи (1-9). Поголемите броеви генерално ќе дадат помали корисни товари по цена на дополнително време за обработка. Постојат и две посебни нивоа на компресија: 0 (за никаква компресија) и -1 (внатрешна стандардна вредност на zlib -- моментално 6). window е логаритам со основа 2 од големината на прозорецот за враќање на компресијата. Поголемите вредности (до 15 -- 32768 бајти) даваат подобра компресија по цена на меморијата, додека пониските вредности (до 9 -- 512 бајти) даваат полоша компресија со помал мемориски отпечаток. Стандардна window големината моментално е 15. memory е скала што покажува колку работна меморија треба да се распредели. Валидните вредности се движат од 1 (минимална распределба) до 9 (максимална распределба). Оваа распределба на меморијата влијае само на брзината и не влијае на големината на генерираниот корисен товар.

Забелешка: Бидејќи нивото на компресија е најчесто користен параметар, тој може алтернативно да се обезбеди како едноставна целбројна вредност (наместо елемент од низа).

zlib.* филтрите за компресија се достапни ако zlib поддршката е овозможена.

Пример #1 zlib.deflate and zlib.inflate

<?php
$params
= array('level' => 6, 'window' => 15, 'memory' => 9);

$original_text = "This is a test.\nThis is only a test.\nThis is not an important string.\n";
echo
"The original text is " . strlen($original_text) . " characters long.\n";

$fp = fopen('test.deflated', 'w');
stream_filter_append($fp, 'zlib.deflate', STREAM_FILTER_WRITE, $params);
fwrite($fp, $original_text);
fclose($fp);

echo
"The compressed file is " . filesize('test.deflated') . " bytes long.\n";
echo
"The original text was:\n";
/* Use readfile and zlib.inflate to decompress on the fly */
readfile('php://filter/zlib.inflate/resource=test.deflated');

/* Generates output:

The original text is 70 characters long.
The compressed file is 56 bytes long.
The original text was:
This is a test.
This is only a test.
This is not an important string.

*/
?>

Пример #2 zlib.deflate simple

<?php
$original_text
= "This is a test.\nThis is only a test.\nThis is not an important string.\n";
echo
"The original text is " . strlen($original_text) . " characters long.\n";

$fp = fopen('test.deflated', 'w');
/* Here "6" indicates compression level 6 */
stream_filter_append($fp, 'zlib.deflate', STREAM_FILTER_WRITE, 6);
fwrite($fp, $original_text);
fclose($fp);

echo
"The compressed file is " . filesize('test.deflated') . " bytes long.\n";

/* Generates output:

The original text is 70 characters long.
The compressed file is 56 bytes long.

*/
?>

bzip2.compress и bzip2.decompress

bzip2.compress and bzip2.decompress работат на ист начин како филтрите zlib опишани погоре. Филтерот bzip2.compress прифаќа до два параметри дадени како елементи на асоцијативен низ: blocks е цел број од 1 до 9 што го специфицира бројот на блокови од 100 KB меморија за распределба за работен простор. work е цел број од 1 до 9 што го специфицира бројот на блокови од 100 KB меморија за доделување за работниот простор. bzip2.decompress е исто така цел број во опсег од 0 до 250 што укажува колку напор да се вложи со користење на нормалниот метод на компресија пред да се врати на побавен, но посигурен метод. Подесувањето на овој параметар влијае само на брзината на компресија. Ниту големината на компресираниот излез, ниту употребата на меморија не се променети со оваа поставка. Фактор на работа од 0 го инструктира bzip библиотеката да користи внатрешна стандардна вредност. The small филтерот прифаќа само еден параметар, кој може да се помине или како обична булова вредност, или како smallелемент од асоцијативен низ. true , кога е поставен на

вредност, го инструктира bzip библиотеката да изврши декомпресија со минимален мемориски отпечаток по цена на брзината. bz2 поддршката е овозможена.

Пример #3 bzip2.compress and bzip2.decompress

<?php
$param
= array('blocks' => 9, 'work' => 0);

echo
"The original file is " . filesize('LICENSE') . " bytes long.\n";

$fp = fopen('LICENSE.compressed', 'w');
stream_filter_append($fp, 'bzip2.compress', STREAM_FILTER_WRITE, $param);
fwrite($fp, file_get_contents('LICENSE'));
fclose($fp);

echo
"The compressed file is " . filesize('LICENSE.compressed') . " bytes long.\n";

/* Generates output:

The original file is 3288 bytes long.
The compressed file is 1488 bytes long.

*/
?>

Белешки од корисници 4 белешки

Анонимен
пред 10 години
To read a gzip encoded stream from http
<?php
$opts = [
    "http" => [
        "method" => "GET",
        "header" => [ "Accept-Encoding: gzip" ],
    ]
];
$ctx = stream_context_create($opts);
$f = fopen("http://php.net", "r", false, $ctx);
// check  stream_get_meta_data($f)["wrapper_data"] has "Content-Encoding: gzip"
stream_filter_append($f, "zlib.inflate", STREAM_FILTER_READ, ["window" => 30]);
echo stream_get_contents($f); // any stream processing
fclose($f);
bohwaz
пред 7 години
Please note that there is currently a bug in this feature. ftell(), fseek() and fstat() functions cannot be used. Writing to a stream after using this function will not change the stream position as it should.

See bug: https://bugs.php.net/bug.php?id=49874

Also the zlib filters don't work with php://temp, php://memory and php://input streams, nothing is outputted to those streams.
TingSong
3 години пред
To decompress a gzipped stream:

<?php
$stream = fopen('https://example.com/some/file.txt.gz', 'rb');
stream_filter_append($stream, 'zlib.inflate', STREAM_FILTER_READ, ['window' => 15+16]);

// read the decompressed line directly
$line = fgets($stream);

// process the lines
?>

As the doc of zlib https://www.zlib.net/manual.html#Advanced

The 'window' parameter between 8 and 15 specified the window size from 2⁸ to 2¹⁵ bytes. It can be added by 16 for wrapping with gzip header and trailer instead of zlib wrapper.

And, window could be -8..-15 for unwrapping RAW deflate data.
Анонимен
пред 5 години
To use the zlib.inflate filter with data originally written using gzcompress() or zlib.deflate, set the window option to 15 as outlined here: https://bugs.php.net/bug.php?id=68556

<?php
$fh = fopen(file_name, 'rb');
stream_filter_append($fh, 'zlib.inflate', STREAM_FILTER_READ, ['window' => 15]);
$contents = stream_get_contents($fh);
fclose($fh);
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.