Subscribe:

viernes, 22 de julio de 2011

REPORTES PDF CON LA CLASE FPDF, PHP Y MYSQL

¿Qué es FPDF?

FPDF es una clase escrita en PHP que permite generar documentos PDF directamente desde PHP, es decir, sin usar la biblioteca PDFlib. La F de FPDF significa Free (gratis y libre): puede usted usarla para cualquier propósito y modificarla a su gusto para satisfacer sus necesidades.

FPDF tiene otras ventajas: funciones de alto nivel. Esta es una lista de sus principales características:

* Elección de la unidad de medida, formato de página y márgenes
* Gestión de cabeceras y pies de página
* Salto de página automático
* Salto de línea y justificación del texto automáticos
* Admisión de imágenes (JPEG, PNG y GIF)
* Colores
* Enlaces
* Admisión de fuentes TrueType, Type1 y codificación
* Compresión de página

La clase se puede descargar en la página oficial http://www.fpdf.org/

Una vez que la incluyas dentro de tu carpeta de proyectos web, puedes crear un pdf como lo desees.. Aquí mi ejemplo particular, ṕara adaptarlo puedes configurar tu clave usuario, y base de datos a usar, modificas las consultas a conveniencia, en este caso hay dos tablas dos funciones y dos consultas..


SetFillColor(62,102,60); // fondo de celda
$this->SetTextColor(255); // color del texto
$this->SetDrawColor(0,0,0); // color de linea
$this->SetLineWidth(.3); // ancho de linea
$this->SetFont('Arial','', 7);
$w=array(20,100,15,10,15,15,15); // en este arreglo definiremos el ancho de cada columna
for($i=0;$iCell($w[$i],4,$header[$i],1,0,'C',1); //por cada encabezado existente, crea una celda
$this->Ln();
//Colores, ancho de línea y fuente en negrita de CONTENIDO
$this->SetFillColor(244,244,244); //
$this->SetTextColor(0);
$this->SetFont('');
//Datos
$fill=false; // variable para alternar relleno
foreach($data as $row)
{
$columna = explode(";",$row); //separar los datos en posiciones de arreglo
$this->Cell($w[0],6,$columna[0],'LR',0,'L',$fill); //celda(ancho,alto,salto de linea,border,alineacion,relleno)
$this->Cell($w[1],6,$columna[1],'LR',0,'L',$fill);
$this->Cell($w[2],6,$columna[2],'LR',0,'L',$fill);
$this->Cell($w[3],6,$columna[3],'LR',0,'L',$fill);
$this->Cell($w[4],6,$columna[4],'LR',0,'L',$fill);
$this->Cell($w[5],6,$columna[5],'LR',0,'L',$fill);
$this->Cell($w[6],6,$columna[6],'LR',0,'L',$fill);
$this->Ln();
$fill=!$fill; //se alterna el valor del boolean $fill para cambiar relleno
}
$this->Cell(array_sum($w),0,'','T');
}
function tabla1($header1,$data1)
{
//Colores, ancho de línea y fuente en negrita de CABECERA
$this->SetFillColor(62,102,60); // fondo de celda
$this->SetTextColor(255); // color del texto
$this->SetDrawColor(0,0,0); // color de linea
$this->SetLineWidth(.3); // ancho de linea
$this->SetFont('Arial','', 6); // negrita
$w=array(70); // en este arreglo definiremos el ancho de cada columna
for($i=0;$iCell($w[$i],4,$header1[$i],1,0,'C',1); //por cada encabezado existente, crea una celda
$this->Ln();
//Colores, ancho de línea y fuente en negrita de CONTENIDO
$this->SetFillColor(244,244,244); //
$this->SetTextColor(0);
$this->SetFont('');
//Datos
$fill=false; // variable para alternar relleno
foreach($data1 as $row)
{
$columna = explode(";",$row); //separar los datos en posiciones de arreglo

// validación a mano para que respete el limite de la celda

if ($columna[0]>$w[0]){
$this->Cell($w[0],20,$columna[0],'LR',1,'L',$fill); //celda(ancho,alto,salto de linea,border,alineacion,relleno)
}
else{
$this->Cell($w[0],5,substr($columna[0],0, 45),'LR',1,'L',$fill);
$this->Cell($w[0],5,substr($columna[0],45,53),'LR',1,'L',$fill);
$this->Cell($w[0],5,substr($columna[0],99,150),'LR',1,'L',$fill);
$this->Ln(0);
}
$fill=!$fill; //se alterna el valor del boolean $fill para cambiar relleno
}
$this->Cell(array_sum($w),0,'','T');
}
function Footer()
{
//Pie de página
$this->SetY(-15);
$this->SetFont('Arial','I',10);
$this->SetTextColor(128);
$this->Cell(0,10,'Pagina '.$this->PageNo().' de {nb}',0,0,'C'); // el parametro {nb} es generado por una funcion llamada AliasNbPages
}
}
$pdf = new PDF();
$pdf->AliasNbPages(); //funcion que calcula el numero de paginas
$sql1 = "SELECT informacion FROM empresa";
$modificar11 = mysql_query($sql1, $conex) or die(mysql_error());
$head1 = array("VENEZOLANA DE RIEGO, C.A"); // cabecera
$i=0;
while ($fila=mysql_fetch_array($modificar11)){ //llenar variable dat con los campos de una fila unidos por ;
$dat1[$i]=$fila[0]; //concatenar para luego ser separado por explode()
$i++;
}
$sql = "SELECT codigo, descripcion, unidad, cantidad, precio_uni, descuento, total FROM orden_articulos where orden='10733'";
$modificar1 = mysql_query($sql, $conex) or die(mysql_error());
$head = array("Codigo","Descripcion","Unidad","Cant","Precio","Dcto","Total"); // cabecera
$i=0;
while ($fila=mysql_fetch_array($modificar1)){ //llenar variable dat con los campos de una fila unidos por ;
$dat[$i]=$fila[0].";".($fila[1]).";".$fila[2].";".$fila[3].";".$fila[4].";".$fila[5].";".$fila[6]; //concatenar para luego ser separado por explode()
$i++;
}
$pdf->AddPage(); //crear documento
$pdf->Image('images/logo.jpg',10,8,30,30); //añadir imagen
$pdf->Cell(50);
$pdf->SetFont('Arial','',12);
$pdf->Cell(120,15,"ORDEN DE COMPRA",0,0,'C');
$pdf->Ln(35);
$pdf->SetFont('Arial','',12);
$pdf->Ln(10);
$pdf->tabla1($head1,$dat1);
$pdf->Ln(30);
$pdf->tabla($head,$dat);
$pdf->Output(); //el resto es historia
?>

viernes, 15 de julio de 2011

BLOQUEAR PUERTOS DEL MESSENGER ZENTYAL

Si quieres que un grupo de usuarios específicos no use el messenger (aplicación) procedemos a bloquear algunos puertos.. 

Primero debemos crear en core-servicios un servicio y lo llamamos mns con las configuraciones que se muestran en la imagen..

Luego, nos ubicamos en, cortafuegos-filtrado de perfiles-reglas internas y agrgamos la siguiente regla:


En este caso Origen "Restringidos" es el grupo que queremos bloquearle los puertos del messenger.

TAREAS PROGRAMADAS CON GNU/LINUX


Cron es un programa o daemon que permite ejecutar otros programas o scripts en un lapso de tiempo y una periodicidad especificada por el usuario. Su comportamiento esta regulado por su archivo de configuración, que se llama crontab. Cada usuario del sistema posee un archivo crontab personalizado y sólo el usuario root puede modificar el archivo crontab de otro usuario. 

La sintaxis del archivo crontab es muy clara y rígida. Hay 7 campos por cada linea, y cada campo está separado por un espacio. Los primeros cinco campos específican el momento preciso de ejecución, mientras que el sexto campo se coloca el usuario, y el séptimo es el propio comando o script que se ejecutará. 

El asterisco * en alguno de los campos se entenderá como todos los valores posibles. Por lo tango, un * en el campo mes se entenderá como que el comando se ejecuta todos los meses en el momento indicado en el resto de los campos.
Ejemplos:
Accedemos al terminal, nos logueamos como como root y abrimos el archivo crontab con el editor de texto de nuestra preferencia. En este caso usaremos nano. Ejecutamos:
nano /etc/crontab


Se mostrará las  tareas programadas en crontab, en este ejemplo:
  • Las 4 primeras tareas, las crea automáticamente cuando se configura el automysqlbackup (anterior post), pero si queremos personalizar la hora a nuestro antojo, podemos agregar la quinta tarea que se explica a continuación.
  • La quinta tarea es para que respalde todos los días a las 10 de la noche las base de datos mysql que se configuraron en el automysqlbackup . 
  • La sexta tarea es para que el Sistema Operativo se apague cada 31 de Diciembre a las 11 de la noche.

RESPALDOS DE BASE DE DATOS MYSQL CON AUTOMYSQLBACKUP

AutoMySQLBackup es un shell script que te permite crear respaldos automáticos diarios, semanales y mensuales  de una o varias base de datos mysql. Usa mysqldump para realizar el volcado de las bases de datos y ordenarlas en el directorio que nosotros le configuremos.



Instalación del AutoMySQLBackup
Si tienes funcionando perfectamente el mysql, procedemos a la instalación AutoMySQLBackup. Ahora bien, como el paquete se encuentra en los repositorios  de Ubuntu, podemos instalarlo tecleando en la terminal:
sudo apt-get install automysqlbackup

Configuración del AutoMySQLBackup
Vamos a proceder con la configuración de AutoMySQLBackup, con cualquier editor de texto (nano, gedit, leafpad, etc) abrimos el archivo de configuración que se encuentra en: /etc/defaults/automysqlbackup. Este paquete viene preconfigurado para usar el archivo /etc/mysql/debian.cnf donde se encuentran los parametros de conexión, por lo tanto los parametros USERNAME y PASSWORD los vamos a dejar comentados. Si lo quieres descomentar, debes colocar el usuario y la clave de la conexión mysql. Los siguientes parámetros se listan a continuación:
  • DBHOST=localhost es el servidor MySQL que queremos respaldar, lo dejamos en localhost ya que estamos en el mismo servidor, tambien podemos colocar la dirección ip del servidor.
  • DBNAMES= aqui pondremos los nombres de las bases de datos que queremos respaldar, el paquete viene preconfigurado para tomar los nombre de todas las base de datos realizando una consulta al servidor MySQL, omitiendo la base de datos mysql, si por ejemplo tenemos 3 bases de datos en el sistema pero solo queremos respaldar una tendríamos que configurar este parametro usando los dos nombres de las base de datos por ejemplo: DBNAMES="bd1 bd2", con esto respaldamos únicamente estas bases de datos. Si queremos respaldar una el valor sería DBNAMES="bd1", es importante colocarlo en comillas dobles.
  • BACKUPDIR="/var/lib/automysqlbackup" es el directorio donde se guardarán todos los respaldos, podemos por ejemplo cambiarlo para que apunte a otro disco duro la ruta sería sería /media/nombredelaunidad
  • MAILCONTENT= es lo que se nos enviará por correo, esto lo dejamos en "stdout" ya que no tenemos configurado un MTA (estamos usando lsb-invalid-mta), si tenemos un MTA configurado podemos asignar los valores de:
    • "log", para que nos envíe solo el log de lo que se hizo.
    • "files" para que nos envie el log y los archivos que se realizan de respaldo.
    • "stdout" solo imprimirá en pantalla lo que normalmente se envia por correo (si se ejecuta manualmente).
    • "quiet" solo nos enviará el log si se produce un error al ejecutar el script.
  • MAXATTSIZE= es el tamaño maximo permitido para enviar el correo, si elegimos la opción "files" anterior y contiene bases de datos grandes que superan el tamaño permitido del servidor de correo (por ejemplo Gmail tiene un limite de 20MiB de adjuntos) entonces esta opción evitara el envío inecesario de un correo grande que será rechazado.
  • MAILADDR= es la dirección de correo a la que se enviarán los logs.
  • DBEXCLUDE= con esto excluiremos las bases de datos que le pasemos como parametro, esto es cuando estamos realizando respaldos de todas las bases de datos pero queremos excluir ciertas bases de datos.
  • CREATE_DATABASE= es un valor "yes" o "no" que agrega a los respaldos la creación de la base de datos.
  • SEPDIR= si tiene el valor "yes" nos crea una carpeta separada por cada base de datos y un valor "no" nos crear un solo archivo con todas las bases de datos incluidas.
  • DOWEEKLY= el día de la semana que queremos que se realicen los respaldos semanales, siendo 1 el Lunes y 7 el Domingo.
  • COMP= para aplicar compresión a los archivos, los valores permitidos son gzip y bzip2, aunque se puede hackear un poco el script para permitir compresiones distintas (ZIP, 7zip, etc), yo por ejemplo he modificado el script para permitir hacer respaldos con compresión XZ (LZMA2) resultando en archivos más pequeños que los generados por gzip o bzip.
  • COMMCOMP= valores "yes"-"no" si es el servidor local lo dejamos en "no".
  • LATEST= además de generar respaldos diarios, semanales y mensuales, nos permite crear una carpeta donde esta el último respaldo generado. 
 Prueba de la configuración 
Ejecutamos en el terminal el script: sudo /usr/sbin/automysqlbackup si todo sale bien, podremos comprobar que en el directorio /var/lib/automysqlbackup se crean las respectivas carpetas conteniendo las bases de datos respaldadas.  
Bueno con esto estaremos listos para tener nuestros respaldos a mano de manera simple y cómoda... En el próximo post explicaremos como personalizar los minutos, horas y días que queremos que se ejcute el scrip sudo /usr/sbin/automysqlbackup , el cual es el que general el respaldo.

OCULTAR ARCHIVOS Y CARPETAS EN LINUX

Sólo se tiene que renombrar la carpeta o archivo que queramos ocultar, para esto tenemos varias opciones

1.- Botón derecho sobre el elemento -> Renombrar
2.- Botón derecho sobre el elemento -> Propiedades -> y vamos al campo del nombre
3.- Click Izquierdo sobre la carpeta y presionar F2

Lo único que tenemos que hacer es renombrarlo con un punto ( . ) delante. Es decir, por ejemplo:

ArchivoOculto.txt
Lo cambaimos por:
.ArchivoOculto.txt

CarpetaOculta
La cambaimos por:
.CarpetaOculta

Y una vez hecho esto ya estará oculto. La próxima vez que entremos en la carpeta, ya no lo veremos.

Para ver los archivos o carpetas ocultas, vamos a la carpeta donde están y pulsamos: Control+H y aparecerán todos los ocultos.

lunes, 11 de julio de 2011

BLOQUEAR CHAT GMAIL, HOTMAIL, FACEBOOK (HTTPS), EBUDDY. USANDO DNS EN ZENTYAL


Si usas la Distribución Zentyal en tu servidor de conexiones. Te diriges al menú DNS y colocas las direcciones que deseas bloquear y la direccionas a una ip cualquiera (Que el navegador).. Esto solo funciona para proxy http y para proxy transparente..Sólo que si lo usas para proxy http (No trasparente ) deberías agregar la dirección ip del servidor de conexiones a los servidores de dominios del Zentyal..

  • La primera dirección pertenece solo el chat interno de la página gmail. Los correos no se ven afectados.
  • La segunda dirección es del messenger web de ebuddy.
  • La tercera dirección hace referencia al facebook (Esto bloquea facebook hasta de modo seguro, es decircuando los usuarios ingresan por por https://facebook.com, además bloquea todas las páginas que estén relacionadas con facebook, por ejemplo es-es.facebook.com )
  • La cuarta y quinta dirección es la del chat interno de la página hotmail. EL resto de la página (Correos), sigue funcionando perfectamente.