Gzclose: примеры (PHP)

Использование функции gzclose для работы с архивами
Раздел: Сжатие
gzclose(resource $stream): bool

Функция gzclose в PHP

Функция gzclose закрывает открытый дескриптор gz-файла. Она применяется после завершения операций чтения или записи сжатых файлов в формате gzip.

Аргументы функции

Функция принимает один обязательный параметр:

  • $stream (ресурс) - дескриптор gz-файла, который был открыт с помощью функции gzopen.

После успешного выполнения функция возвращает true, при ошибке - false.

Примеры использования gzclose

Закрытие файла после записи
<?php
$gz = gzopen('example.gz', 'w9');
gzwrite($gz, 'Данные для сжатия');
$result = gzclose($gz);
echo $result ? 'Файл закрыт' : 'Ошибка закрытия';
?>
Файл закрыт
Закрытие с проверкой дескриптора
<?php
$gz = @gzopen('nonexistent.gz', 'r');
if ($gz) {
    echo gzclose($gz) ? 'Закрыто' : 'Ошибка';
} else {
    echo 'Не удалось открыть файл';
}
?>
Не удалось открыть файл

Похожие функции в PHP

fclose

Закрывает обычный файловый дескриптор. Используется для работы с несжатыми файлами.

gzcompress и gzuncompress

Функции для сжатия/распаковки строк без работы с файловой системой. Удобны для операций в памяти.

Выбор функции

Функцию gzclose применяют только для дескрипторов, открытых через gzopen. Для потоков, открытых через fopen, используют fclose.

Аналоги в других языках

Gzclose в Python

import gzip
with gzip.open('example.gz', 'wt') as f:
    f.write('Данные')
# Файл автоматически закрывается
JavaScript (Node.js)
const zlib = require('zlib');
const fs = require('fs');
const input = fs.createReadStream('input.txt');
const output = fs.createWriteStream('input.txt.gz');
const gzip = zlib.createGzip();
input.pipe(gzip).pipe(output);
output.on('close', () => console.log('Завершено'));

Gzclose в MySQL

СУБД MySQL использует встроенное сжатие на уровне таблиц. Отдельных функций закрытия файлов gzip не предусмотрено.

Типичные ошибки

Закрытие уже закрытого дескриптора
<?php
$gz = gzopen('test.gz', 'w');
gzclose($gz);
var_dump(gzclose($gz));
?>
Warning: gzclose(): supplied resource is not a valid stream resource
bool(false)
Использование некорректного ресурса
<?php
$fp = fopen('test.txt', 'w');
gzclose($fp);
?>
Warning: gzclose(): supplied resource is not a valid stream resource

Изменения в PHP 8

В PHP 8 функция gzclose претерпела изменения в обработке некорректных ресурсов. Ранее функция молчаливо возвращала null при неверном дескрипторе. Теперь выбрасывается исключение типа TypeError.

<?php
gzclose('invalid');
?>
TypeError: gzclose(): Argument #1 ($stream) must be of type resource, string given

Расширенные примеры

Пакетное закрытие нескольких файлов
Пример php
<?php
$handles = [];
for ($i = 1; $i <= 5; $i++) {
    $handles[] = gzopen("archive_$i.gz", 'w9');
}

foreach ($handles as $handle) {
    if (is_resource($handle)) {
        gzwrite($handle, "Данные для файла $i");
        gzclose($handle);
    }
}
echo 'Все файлы закрыты';
?>
Все файлы закрыты
Использование в пользовательской функции обработки
Пример php
<?php
function processGzFile($filename, $callback) {
    $gz = gzopen($filename, 'r');
    if (!$gz) return false;
    
    $result = $callback($gz);
    
    gzclose($gz);
    return $result;
}

$content = processGzFile('data.gz', function($handle) {
    return gzread($handle, 1024);
});
echo $content;
?>
Контроль за закрытием в исключительных ситуациях
Пример php
<?php
$gz = null;
try {
    $gz = gzopen('large.gz', 'w');
    // Имитация ошибки
    throw new Exception('Неожиданная ошибка');
    gzwrite($gz, str_repeat('x', 1000));
} finally {
    if ($gz && is_resource($gz)) {
        gzclose($gz);
        echo 'Ресурс освобожден';
    }
}
?>
Ресурс освобожден
Fatal error: Uncaught Exception: Неожиданная ошибка

PHP gzclose function comments

En
Gzclose Close an open gz-file pointer