Phar::compress

(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 2.0.0)

Phar::compress β€” Π‘ΠΆΠΈΠΌΠ°Π΅Ρ‚ вСсь Phar-Π°Ρ€Ρ…ΠΈΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Gzip- ΠΈΠ»ΠΈ Bzip2-сТатия

ОписаниС

public function Phar::compress(int $compression, ?string $extension = null): ?Phar

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Phar потрСбуСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ для Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ phar.readonly Π² Ρ„Π°ΠΉΠ»Π΅ php.ini Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0, ΠΈΠ½Π°Ρ‡Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ выбросит ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ PharException.

Π’ случаС использования с phar-Π°Ρ€Ρ…ΠΈΠ²Π°ΠΌΠΈ, основанными Π½Π° tar ΠΈΠ»ΠΈ phar, этот ΠΌΠ΅Ρ‚ΠΎΠ΄ сТимаСт вСсь Π°Ρ€Ρ…ΠΈΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ gzip- ΠΈΠ»ΠΈ bzip2-сТатиС. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄ gunzip/bunzip; ΠΊ Π½Π΅ΠΌΡƒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прямой доступ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Phar.

Π’ случаС использования с phar-Π°Ρ€Ρ…ΠΈΠ²Π°ΠΌΠΈ, основанными Π½Π° zip, Π²Ρ‹Π·ΠΎΠ² этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΠΎΡ‚Π΅Ρ€ΠΏΠΈΡ‚ Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π±Ρ€ΠΎΡˆΠ΅Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Для сТатия ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ gzip Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ zlib. Для сТатия ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ bzip2 Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ bzip2. Как ΠΈ Π² случаС с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ содСрТаниС phar-Π°Ρ€Ρ…ΠΈΠ²Π°, для ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ INI-пСрСмСнная phar.readonly Π±Ρ‹Π»Π° ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π°.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, этот ΠΌΠ΅Ρ‚ΠΎΠ΄ автоматичСски ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ Π°Ρ€Ρ…ΠΈΠ², добавляя .gz, .bz2 ΠΈΠ»ΠΈ удаляя Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅, Ссли Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Phar::NONE, ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‰ΠΈΠΉ ΠΎ нСобходимости распаковки. Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.

Бписок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

compression

Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· констант: Phar::GZ, Phar::BZ2 для использования ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° сТатия, ΠΈΠ»ΠΈ Phar::NONE для распаковки.

extension

Для сТатия phar-Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ .phar.gz ΠΈΠ»ΠΈ .phar.bz2, Π° для сТатия tar-Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ² β€” .phar.tar.gz ΠΈΠ»ΠΈ .phar.tar.bz2. Π’ случаС распаковки, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΡΠ²Π»ΡΡŽΡ‚ΡΡ .phar ΠΈ .phar.tar.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Phar ΠΈΠ»ΠΈ null Π² случаС возникновСния ошибки.

Ошибки

ВыбрасываСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ BadMethodCallException, Ссли INI-пСрСмСнная phar.readonly Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π°, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ zlib Π½Π΅ доступСн ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ bzip2 Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½.

Бписок измСнСний

ВСрсия ОписаниС
8.0.0 extension Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ допускаСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #1 ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Phar::compress()

<?php
$p
= new Phar('/ΠΏΡƒΡ‚ΡŒ/ΠΊ/my.phar', 0, 'my.phar');
$p['myfile.txt'] = 'ΠΏΡ€ΠΈΠ²Π΅Ρ‚';
$p['myfile2.txt'] = 'ΠΏΡ€ΠΈΠ²Π΅Ρ‚';
$p1 = $p->compress(Phar::GZ); // ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π² /ΠΏΡƒΡ‚ΡŒ/ΠΊ/my.phar.gz
$p2 = $p->compress(Phar::BZ2); // ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π² /ΠΏΡƒΡ‚ΡŒ/ΠΊ/my.phar.bz2
$p3 = $p2->compress(Phar::NONE); // ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅: /ΠΏΡƒΡ‚ΡŒ/ΠΊ/my.phar ΡƒΠΆΠ΅ сущСствуСт
?>

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅

  • PharFileInfo::getCompressedSize() - ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ»ΠΎΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° дискС с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ сТатия
  • PharFileInfo::isCompressed() - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, сТат Π»ΠΈ Ρ„Π°ΠΉΠ»
  • PharFileInfo::compress() - Π‘ΠΆΠΈΠΌΠ°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ zlib ΠΈΠ»ΠΈ bzip2
  • PharFileInfo::decompress() - РаспаковываСт Phar-Ρ„Π°ΠΉΠ» Π² phar-Π°Ρ€Ρ…ΠΈΠ²Π΅
  • PharData::compress() - Π‘ΠΆΠΈΠΌΠ°Π΅Ρ‚ вСсь Π°Ρ€Ρ…ΠΈΠ² tar/zip, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ сТатиС Gzip ΠΈΠ»ΠΈ Bzip2
  • Phar::canCompress() - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π»ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ phar сТатиС с использованиСм zlib ΠΈΠ»ΠΈ bzip2
  • Phar::isCompressed() - Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Phar::GZ ΠΈΠ»ΠΈ PHAR::BZ2, Ссли phar-Π°Ρ€Ρ…ΠΈΠ² сТат Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ (.tar.gz/tar.bz ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅)
  • Phar::decompress() - РаспаковываСт вСсь Phar-Π°Ρ€Ρ…ΠΈΠ²
  • Phar::getSupportedCompression() - Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сТатия
  • Phar::compressFiles() - Π‘ΠΆΠΈΠΌΠ°Π΅Ρ‚ всС Ρ„Π°ΠΉΠ»Ρ‹ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Phar-Π°Ρ€Ρ…ΠΈΠ²Π΅
  • Phar::decompressFiles() - РаспаковываСт всС Ρ„Π°ΠΉΠ»Ρ‹ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Phar-Π°Ρ€Ρ…ΠΈΠ²Π΅
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 1 note

up
1
mike at eyesis dot ca ΒΆ
15 years ago
For those who want the benefit of having a small compressed PHAR archive but don’t want to suffer the performance loss, use php_strip_whitespace when adding files to the archive. If your code has plenty of whitespace, docbocks, and single-line comments this function can greatly decrease archive size without the performance loss. 

<?php
$sDir = 'application';
$oPhar = new Phar ('app.phar');

$oDir = new RecursiveIteratorIterator (new RecursiveDirectoryIterator ($sDir), RecursiveIteratorIterator::SELF_FIRST);

foreach ($oDir as $sFile) {
    if ( preg_match ('/\\.php$/i', $sFile) ) {
        $oPhar->addFromString (substr ($sFile, strlen ($sDir) + 1), php_strip_whitespace ($sFile));
    }
}
?>