Gzclose: примеры (PHP)
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
Закрывает обычный файловый дескриптор. Используется для работы с несжатыми файлами.
Функции для сжатия/распаковки строк без работы с файловой системой. Удобны для операций в памяти.
Функцию gzclose применяют только для дескрипторов, открытых через gzopen. Для потоков, открытых через fopen, используют fclose.
Аналоги в других языках
Gzclose в Python
import gzip
with gzip.open('example.gz', 'wt') as f:
f.write('Данные')
# Файл автоматически закрывается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
$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
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
$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: Неожиданная ошибка