txt - ¿Cómo se crea un archivo.gz usando PHP?
generar txt con php y descargar (6)
Además, podrías usar wrappers de php, los de compresión . Con un cambio mínimo en el código, podrá cambiar entre gzip, bzip2 o zip.
$input = "test.txt";
$output = $input.".gz";
file_put_contents("compress.zlib://$output", file_get_contents($input));
cambie compress.zlib://
a (vea el comentario a esta respuesta sobre compresión zip) , o para compress.zip://
para compress.zip://
zipcompress.bzip2://
a compresión bzip2.
Me gustaría comprimir gzip un archivo en mi servidor usando PHP. ¿Alguien tiene un ejemplo que ingrese un archivo y genere un archivo comprimido?
Este código hace el truco
// Name of the file we''re compressing
$file = "test.txt";
// Name of the gz file we''re creating
$gzfile = "test.gz";
// Open the gz file (w9 is the highest compression)
$fp = gzopen ($gzfile, ''w9'');
// Compress the file
gzwrite ($fp, file_get_contents($file));
// Close the gz file and we''re done
gzclose($fp);
Las otras respuestas aquí cargan todo el archivo en la memoria durante la compresión, lo que provocará errores de " memoria insuficiente" en archivos grandes. La función a continuación debería ser más confiable en archivos grandes a medida que lee y escribe archivos en fragmentos de 512 kb.
/**
* GZIPs a file on disk (appending .gz to the name)
*
* From http://.com/questions/6073397/how-do-you-create-a-gz-file-using-php
* Based on function by Kioob at:
* http://www.php.net/manual/en/function.gzwrite.php#34955
*
* @param string $source Path to file that should be compressed
* @param integer $level GZIP compression level (default: 9)
* @return string New filename (with .gz appended) if success, or false if operation fails
*/
function gzCompressFile($source, $level = 9){
$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;
}
Probablemente sea obvio para muchos, pero si alguna de las funciones de ejecución del programa está habilitada en su sistema ( exec
, system
, shell_exec
), puede usarlas para simplemente gzip
el archivo.
exec("gzip ".$filename);
Si está buscando simplemente descomprimir un archivo, esto funciona y no causa problemas con la memoria:
$bytes = file_put_contents($destination, gzopen($gzip_path, r));
Simple un trazador de líneas con gzencode() :
gzencode(file_get_contents($file_name));