gentoo linux, java, software libre y otras hierbas
jul, 18 2010 - 12:54 am

Comprimir archivos con PHP

Zlib es una librería que proporciona funciones que nos permiten realizar tareas de compresión y descompresión usando el formato GZIP. En esta entrada vamos a ver algunos ejemplos sencillos de compresión de archivos usando dicha librería, y además veremos cómo funcionan las librerías adicionales para comprimir archivos en ZIP y Bunzip… aunque también existen otros formatos disponibles como rar, lzf y phar.

Comprimir y descomprimir usando el formato GZIP

Este es un ejemplo básico en donde se comprime y descomprime un archivo:

function descomprimir($origen, $destino) {
  $string = implode("", gzfile($origen));
  $fp = fopen($destino, "w");
  fwrite($fp, $string, strlen($string));
  fclose($fp);
} 

function comprimir($origen, $destino) {
  $fp = fopen($origen, "r");
  $data = fread ($fp, filesize($origen));
  fclose($fp);
  $zp = gzopen($destino, "w9");
  gzwrite($zp, $data);
  gzclose($zp);
}
comprimir("archivo.txt","archivo.gz");
descomprimir("archivo.gz","archivo2.txt");

Esta es una breve descripción de las funciones para Gzip incluidas en Zlib:

  • gzclose — Cierra un puntero gz-file
  • gzcompress — Comprime una cadena de texto
  • gzencode — Crea una cadena de texto comprimida en gzip
  • gzeof — Verifica si es el fin del archivo en un puntero gz-file
  • gzfile — Lee el contenido de un archivo gzip y lo almacena en un arreglo
  • gzgetc — Obtiene el caracter al que apunta un gz-file pointer
  • gzgets — Obtiene la linea a la que apunta un gz-file pointer
  • gzgetss — Obtiene la linea a la que apunta un gz-file pointer y remueve las etiquetas HTML
  • gzinflate — Descomprime una cadena comprimida
  • gzopen — Abre un archivo gzip

Comprimir usando el formato Bunzip

Aquí un ejemplo muy básico:

function comprimir_bzip($origen, $destino){
    // abrir el archivo en modo escritura
    $bz = bzopen($destino, "w");
    // escribir el contenido del origen
    bzwrite($bz, file_get_contents($filename));
    // cerrar el archivo
    bzclose($bz);
}

Información adicional y lista de las funciones disponibles: PHP: Bunzip.

Comprimir usando el formato ZIP

En este caso se utilizan la clase ZipArchive:

function comprimir_zip($origen, $destino){
    $zip = new ZipArchive();
    if ($zip->open($destino, ZIPARCHIVE::CREATE)!==TRUE) {
        die("Error al crear el archivo");
    }
    $zip->addFile($origen, "/".basename($origen));
    $zip->close();
}

Verificar la existencia de las librerías

Esta es una manera sencilla de verificar si PHP fue compilado con soporte para estas librerías:

if( class_exists('ZipArchive') )
    echo "ZIP: OK\n";
if( function_exists('bzwrite') )
    echo "Bunzip: OK\n";
if( function_exists('gzwrite') )
    echo "gzip: OK\n";

11 Comentarios | deja el tuyo

feb, 02 2010 - 2:10 am

Convertir XML a Array en PHP

PHP posee una completa API para la manipulación de archivos XML. Sin embargo, algunas veces queremos hacer cosas muy simples y no vale la pena construir manualmente un script que sirva de parser de un archivo XML. En esos casos, podemos hacer uso de una función llamada xml2array.

La idea es bastante simple: le pasamos como argumento el string de un archivo XML y nos retorna un array asociativo con los datos del mismo. Los pasos son los siguientes:

0. Descargar la función

Lo primero es descargar la función de aquí. Copias el código PHP y lo pones en un archivo con nombre xml2array.php

1. Ejecutar la función [ejemplo]

Debemos usar la función file_get_contents para obtener el string con el XML que pasaremos como parámetro a la función. Suponiendo que tenemos este archivo XML:

<?xml version="1.0" encoding="iso-8859-1"?>
<distros type="linux">
    <nombre id="1">Gentoo</nombre>
    <nombre id="2">Arch</nombre>
    <nombre id="3">Exherbo</nombre>
</distros>

Podríamos usar xml2array así:

<?php
require("xml2array.php");
$contenido = file_get_contents('datos.xml');
$resultado = xml2array($contenido);
var_dump($resultado);
?>

El resultado sería el dump del array: Leer el resto de la entrada…

9 Comentarios | deja el tuyo

oct, 10 2008 - 11:09 am

nWordPress, wordpress en Java

Hace un par de días leí en JavaHispano acerca de nWordpress, un porte de WordPress 2.51 a Java que ha sido realizado por Numiton. Lo han logrado utilizando su herramienta PtoJ, que permite traducir de modo automático código PHP a código Java/Java EE.

Por supuesto lo he probado por curiosidad, y de primerazo parece funcionar bien:

Contras:

Pues yo le veo bastantes:

  • Puesto que es un proyecto que está en sus inicios: no soporta otros lenguajes mas que el inglés, no soporta plugins ni nuevos temas; no más con eso creo que no sirve :P
  • Es inncesesario (opinión personal)
  • No deja de ser mas que una simple curiosidad (o broma, como algunos desarrolladores han comentado). Por supuesto no tiene sentido cambiar de una plataforma que puedes montar fácilmente en cualquier servidor (apache+php), por una un poco más difícil de implementar (tomcat+java).
Igual, si alguien se ánima a echarle un vistazo, los pasos de instalación son muy breves:
  • Instalar Tomcat Apache y MySQL; esto te puede ayudar: clic y clic.
  • Descargar los binarios
  • Copiar el archivo .war en la carpeta webapps
  • Iniciar los servicios de Tomcat y poner en el navegador: http://localhost:puerto/nwp
Página oficial del proyecto

5 Comentarios | deja el tuyo

« Entradas anteriores