Comprimir Archivos ZIP con PHP
Hace algunos dias me encontraba programando un script la cual me permita descargar archivos de mi hosting, pues mi linea de internet andaba media rara y cada vés que descargaba algo desde mi cliente FTP, la linea se me cortaba y bueno decidi hacerlo mediante mi amigo PHP, realizar un Backupeador de archivos (no tenia acceso al cpanel para poder usar filemanager) entonces hize un script el cual me descargaba los archivos a mi PC, pero habian archivos muy pesados y demoraban, no tenia paciencia asi qué pense en comprimirlos para ellos realize el siguiente script.
Funciones.php
Comprimir.php
Espero qué les sirva, Saludos.
Hace algunos dias me encontraba programando un script la cual me permita descargar archivos de mi hosting, pues mi linea de internet andaba media rara y cada vés que descargaba algo desde mi cliente FTP, la linea se me cortaba y bueno decidi hacerlo mediante mi amigo PHP, realizar un Backupeador de archivos (no tenia acceso al cpanel para poder usar filemanager) entonces hize un script el cual me descargaba los archivos a mi PC, pero habian archivos muy pesados y demoraban, no tenia paciencia asi qué pense en comprimirlos para ellos realize el siguiente script.
Funciones.php
[color=#000000] [color=#0000BB]<?php
[/color][color=#007700]function [/color][color=#0000BB]comprimir[/color][color=#007700]([/color][color=#0000BB]$ruta[/color][color=#007700], [/color][color=#0000BB]$zip_salida[/color][color=#007700], [/color][color=#0000BB]$handle [/color][color=#007700]= [/color][color=#0000BB]false[/color][color=#007700], [/color][color=#0000BB]$recursivo [/color][color=#007700]= [/color][color=#0000BB]false[/color][color=#007700]){
[/color][color=#FF8000]/* Declara el handle del objeto */
[/color][color=#007700]if(![/color][color=#0000BB]$handle[/color][color=#007700]){
[/color][color=#0000BB]$handle [/color][color=#007700]= new [/color][color=#0000BB]ZipArchive[/color][color=#007700];
if ([/color][color=#0000BB]$handle[/color][color=#007700]->[/color][color=#0000BB]open[/color][color=#007700]([/color][color=#0000BB]$zip_salida[/color][color=#007700], [/color][color=#0000BB]ZipArchive[/color][color=#007700]::[/color][color=#0000BB]CREATE[/color][color=#007700]) === [/color][color=#0000BB]false[/color][color=#007700]){
return [/color][color=#0000BB]false[/color][color=#007700]; [/color][color=#FF8000]/* Imposible crear el archivo ZIP */
[/color][color=#007700]}
}
[/color][color=#FF8000]/* Procesa directorio */
[/color][color=#007700]if([/color][color=#0000BB]is_dir[/color][color=#007700]([/color][color=#0000BB]$ruta[/color][color=#007700])){
[/color][color=#FF8000]/* Aseguramos que sea un directorio sin carácteres corruptos */
[/color][color=#0000BB]$ruta [/color][color=#007700]= [/color][color=#0000BB]dirname[/color][color=#007700]([/color][color=#0000BB]$ruta[/color][color=#007700].[/color][color=#DD0000]'/arch.ext'[/color][color=#007700]);
[/color][color=#0000BB]$handle[/color][color=#007700]->[/color][color=#0000BB]addEmptyDir[/color][color=#007700]([/color][color=#0000BB]$ruta[/color][color=#007700]); [/color][color=#FF8000]/* Agrega el directorio comprimido */
[/color][color=#007700]foreach([/color][color=#0000BB]glob[/color][color=#007700]([/color][color=#0000BB]$ruta[/color][color=#007700].[/color][color=#DD0000]'/*'[/color][color=#007700]) as [/color][color=#0000BB]$url[/color][color=#007700]){ [/color][color=#FF8000]/* Procesa cada directorio o archivo dentro de el */
[/color][color=#0000BB]comprimir[/color][color=#007700]([/color][color=#0000BB]$url[/color][color=#007700], [/color][color=#0000BB]$zip_salida[/color][color=#007700], [/color][color=#0000BB]$handle[/color][color=#007700], [/color][color=#0000BB]true[/color][color=#007700]); [/color][color=#FF8000]/* Comprime el subdirectorio o archivo */
[/color][color=#007700]}
[/color][color=#FF8000]/* Procesa archivo */
[/color][color=#007700]}else{
[/color][color=#0000BB]$handle[/color][color=#007700]->[/color][color=#0000BB]addFile[/color][color=#007700]([/color][color=#0000BB]$ruta[/color][color=#007700]);
}
[/color][color=#FF8000]/* Finaliza el ZIP si no se está ejecutando una acción recursiva en progreso */
[/color][color=#007700]if(![/color][color=#0000BB]$recursivo[/color][color=#007700]){
[/color][color=#0000BB]$handle[/color][color=#007700]->[/color][color=#0000BB]close[/color][color=#007700]();
}
return [/color][color=#0000BB]true[/color][color=#007700]; [/color][color=#FF8000]/* Retorno satisfactorio */
[/color][color=#007700]}
[/color][color=#0000BB]?>[/color][/color]
Comprimir.php
[color=#000000][color=#0000BB]<?php
$ruta [/color][color=#007700]= [/color][color=#DD0000]'carpeta/'[/color][color=#007700]; [/color][color=#FF8000]//indica la carpeta que desees comprimir
[/color][color=#007700]if([/color][color=#0000BB]comprimir[/color][color=#007700]([/color][color=#0000BB]$ruta[/color][color=#007700], [/color][color=#DD0000]'archivo.zip'[/color][color=#007700]))
echo [/color][color=#DD0000]'Comprimido y Descargado Correctamente'[/color][color=#007700];
else
echo [/color][color=#DD0000]'Error'[/color][color=#007700];
[/color][color=#0000BB]?>[/color][/color]
Espero qué les sirva, Saludos.