katzlbtjunk's method is certainly shorter, but it is unusable for anything except small files. It would try to load the whole file into memory, then create an entire compressed copy, and only then write it to disk. The other method given below will not exhaust memory like that.
gzwrite
(PHP 4, PHP 5)
gzwrite — Бинарная запись в gz-файл
Описание
Записывает содержимое string в данный gz-файл.
Список параметров
- zp
-
Указатель на gz-файл, возвращённый, после его успешного открытия, функцией gzopen().
- string
-
Записываемая строка.
- length
-
Число записываемых байтов (до сжатия). Если указано, запись завершится по записи length байтов или достижении конца строки string .
Замечание: Обратите внимание, что если аргумент length задан, конфигурационный паарметр magic_quotes_runtime будет проигнорирован и удаление косых чёрточек из записываемый строки произведено не будет.
Возвращаемые значения
Возвращает число действительно записанных байт (без учёта сжатия) в поток gz-файла.
gzwrite
27-Mar-2008 01:34
21-Feb-2008 11:24
How about this instead:
$s = file_get_contents('file.tar');
file_put_contents('file.tar.gz',gzencode($s,9));
13-Aug-2003 04:30
This is a short example of use gzwrite function.
<?php
function gzcompressfile($source,$level=false){
$dest=$source.'.gz';
$mode='wb'.$level;
$error=false;
if($fp_out=gzopen($dest,$mode)){
if($fp_in=fopen($source,'rb')){
while(!feof($fp_in))
gzwrite($fp_out,fread($fp_in,1024*512));
fclose($fp_in);
}
else $error=true;
gzclose($fp_out);
}
else $error=true;
if($error) return false;
else return $dest;
}
?>
the function gzcompressfile() compress a file 'data.csv' to 'data.csv.gz'. the function return false if error, and the new file name if it's ok.
