Entradas con la etiqueta ‘PHP’

Modificar el tiempo de vida de una sesión en php

Martes, 8 de Junio de 2010

Las sesiones en php tienen múltiples usos, el más habitual, el de mantener activo un usuario logueado. En la mayoría de configuraciones de php el SID se propaga mediante cookies, por lo que para modificar el tiempo de vida de una sesión debe usarse la directiva session.cookie_lifetime.

Por ejemplo, para setear sesiones de dos minutos:

ini_set(”session.cookie_lifetime”,120);  //El tiempo viene dado en segundos

Además, será necesario combinarlo con el valor gc_maxlifetime para que el recolector de basura de php no elimine la cookie antes de su expiración.

Siguiendo el ejemplo de los dos minutos, deberíamos inicar lo siguiente:

ini_set(”session.gc_maxlifetime”, 120);

Por último, recordar que estos parámetros deben cambiarse antes de la instrucción session_start(); que es la que nos seteará la cookie en el caso de que ésta no estuviera ya en servidor.

Importante: Es posible que intentéis modificar este tiempo y os de la sensación de que no funciona. Hay que tener en cuenta que es posible que hayáis modificado el código pero vuestro equipo siga teniendo una cookie activa, por lo que hasta que no caduque la anterior no se os guardará la nueva con el tiempo de vida actualizado. Lo mejor para hacer pruebas es disponer de una herramienta como web developer toolbar que os permitirá controlar las cookies, pudiendo eliminar la antigua y comprobar que el código funciona correctamente.

Aprender hacer expresiones regulares para quitar los tags de un texto en php

Jueves, 19 de Noviembre de 2009

Para eliminar los tags de un texto, ya sea en php o javascript o cualquier otro lenguaje, vamos a utiizar expresiones regulares.

la ideal para tags es:  .<[^>]+>.

Para aprender a como funcionan las expresiones regulares, podemos utilizar un simuladro muy bueno, que nos permite probar “in the fly”, en tiempo real. Si la expressión regular es válida o hace lo que queremos.

Para ello te deja poner un texto donde reconocer y la expressión.

El sitio es:  regexpal.com

dedicado a luis.

Imprimir directo desde ms-dos. Tickets desde php bajo Windows

Jueves, 10 de Septiembre de 2009

Hace tiempo solventamos la impresión desde php a impresora de tickets bajo Linux mediante este método

Ahora tenemos la problemática de hacer lo mismo desde Windows. Existe la extensión printer pero nos interesa reutilizar la mayor parte del código, en este caso el cuerpo del ticket, para que las versiones bajo Windows y Linux difieran el mínimo posible.

Bien, siguiendo el mismo método necesitamos imprimir un fichero previamente generado desde php directamente desde consola (en este caso mediante comandos ms-dos). Ms-dos y las impresoras usb no se llevan bien, así que toca hacer un pequeño “apaño”. Mapear el puerto LPT1 a un puerto de impresión de red con nuestra impresora previamente compartida en red. Estos son los pasos:

1) Nos asegurarnos de tener, al menos, una interfaz de red. En caso de no tener ninguna podemos añadir un adaptador ficticio, como “Adaptador de bucle invertido de Microsoft” y asignarle una IP.

2) Compartimos la impresora (que por cierto, debe ser sólo texto) en red. Recordamos el nombre que le asignamos como recurso compartido.

3) Mapeamos el puerto desde ms-dos con el siguiente comando: NET USE LPT1: \\[nombre_en_red_de_la_maquina]\[nombre_impresora] /PERSISTENT:YES

4) Ahora desde php ya podemos imprimir el fichero que queramos con: shell_exec(’type nombre_fichero>lpt1′);

Con un pequeño if que detecte el sistema operativo en que está instalado php podemos tener un sistema de impresión de tickets multiplataforma. Eso si, con nuestra intervención para mapear el puerto.

DOMPDF - Problemas con el salto de línea

Miércoles, 26 de Noviembre de 2008

¿Qué es DOMPDF?

dompdf es una librería que permite convertir HTML a PDF, desarrollada en PHP5, leerá hojas de estilo externas, estilos en etiquetas y soporta la mayoría de los atributos HTML.

El tratamiento de PDF se hace mediante PDFLib, por lo que es necesaria la extension PDFLib de PECL, la cual mejora el rendimiento y reduce el gasto de memoria.

Admite la mayoría de las propiedades y selectores CSS2.1 y los atributos HTML 4.0. Además permite tablas complejas, imágenes PNG, GIF y JPEG, y enlaces, entre otras cosas.

Aún faltan algunos detalles como listas ordenadas, posicionamiento absoluto y relativo, y cuando el fichero tiene demasiado tamaño se toma un tiempo excesivo en generar el PDF.

dompdf

Problema

Quiero concatenar dos salidas de pagina html en un solo PDF.

ob_start();

//aquí el contenido de la página 1

$buffer1 = ob_get_contents();

//aquí el contenido de la página 2

$buffer2 = ob_get_contents();

ob_end_clean();

El problema que me he encontrado es que no hace un auto-salto de linea al detectar la etiqueta <html> ni nada por el estilo, además que da errores al concatenar dos documentos cuando el primero esta ‘cerrado’(</html>).

Primero de todo, borramos el </body> y el </html> de la primera salida de contenidos (sino salta error y no genera el pdf) y en su lugar ponemos:

<div style=”page-break-after: always;”></div>

¿Que es page-break-after/page-break-before?

page-break-after y page-break-before son propiedades de estilos CSS que se aplican a la hora de imprimir páginas web en la impresora, para forzar saltos de página después o antes de ciertos elementos.

Ahora ya podemos generar un documento PDF a partir de los PDF que queramos por separado, ya que solventamos el lio que se hace el dompdf con ‘</html> y posteriormente <html>’ y ademas cuando acaba un documento, deja el espacio de la hoja que resta, y continua en la siguiente.

$dompdf = new DOMPDF();
$dompdf->load_html($buffer1.$buffer2);
$dompdf->render();
$dompdf->stream(”Pdf/temporales/verfactura.pdf”,array(”Attachment” => 1));

Generar códigos de barras con PHP y PEAR:Image_Barcode. (Y, sobretodo, como cambiar la altura del código de barras)

Miércoles, 3 de Septiembre de 2008

Ante la necesidad de generar códigos de barras mediante PHP, he encontrado el paquete de PEAR Image_Barcode.

La instalación no puede ser más sencilla en Ubuntu 8.04. Image_Barcode se encuentra en los repositorios en forma de módulo de PHP (php-image-barcode). Ha instalado Pear y Gd como dependencias y ya está.

Con un:

sudo apt-get install php-image-barcode

Ya tenemos instalado todo lo necesario

En caso de no tener hasta ahora Gd, se hace necesario reiniciar apache:

sudo /etc/init.d/apache2 restart

Bien, ahora ya podemos ejecutar el ejemplo que nos dan en la documentación:

PHP:
  1. require_once 'Image/Barcode.php';
  2. Image_Barcode::draw('1234', 'int25', 'png');

Nos generará la siguiente imagen:  

En nuestro caso necesitamos generar códigos con letras y descripciones, por esta razón utilizamos el tipo de código "code128", quedando el ejemplo de la siguiente manera:

PHP:
  1. require_once 'Image/Barcode.php';
  2. Image_Barcode::draw('ControlZeta', 'code128', 'png');

Se nos genera esta otra imagen:

Código de barras alfanumérico con Control Zeta

Hasta aquí todo perfecto, pero... Estos códigos son demasiado altos para el uso que se les va a dar, así que necesitamos disminuir el alto del código. Una opción seria modificar directamente la altura de la imagen, pero esto "achataría" el texto inferior. No nos interesa.

Evidentemente hemos ido a la documentación oficial: http://pear.php.net/package/Image_Barcode/docs

Tras no ser capaz de encontrar ningún método para modificar la altura de códigos de barras code128 (cualquier ayuda será bienvenida) he ido directamente a la clase para ver como podía modificar esta altura. Mi sorpresa ha sido no encontrar ningún método que hiciera lo que necesitaba, pero en cambio, me encontrado con esta simple porción de código nada más empezar a leer:

PHP:
  1. class Image_Barcode_code128 extends Image_Barcode
  2. {
  3. var $_type = 'code128';
  4. var $_barcodeheight = 60;
  5. var $_font = 2;
  6. var $_barwidth = 1;
  7. var $code;
  8.  
  9. ...

Evidentemente, he cambiado el valor $_barcodeheight y todo ha funcionado a la perfección, pero estoy seguro que hay algún motivo para que este valor sea fijo. ¿Alguien tiene alguna explicación al respecto?

Por cierto, el resultado final es este:

Instalación de PHP-GTK2 en Linux Ubuntu 8.04

Miércoles, 23 de Julio de 2008

Seguimos el tutorial oficial de instalación que se encuentra en esta página.

Aunque Ubuntu lleva el php5 instalado, vamos a hacer un update de versión para asegurar de que todo se hace bien:

cvs -d :pserver:cvsread@cvs.php.net:/repository login
cvs -d :pserver:cvsread@cvs.php.net:/repository co -r PHP_5_2 php-src

Si no teneis el CVS instalado: sudo apt-get install cvs

Ahora que ya esta actualizada/comprobada la version de php, procedemos a compilar su instalación, para ello es necesario seguir los siguientes pasos, (atención a posibles fallos, comento dos más abajo):

cd php-src
./buildconf
./configure --prefix=/opt/php5_2 --disable-cgi
make
su
make install
echo extension=php_gtk2.so >> /opt/php5_2/lib/php.ini
/opt/php5_2/bin/php-config --extension-dir | xargs echo 'extension_dir=' >> /opt/php5_2/lib/php.ini

A mi me ha dado dos errores el paso de './configure...', éstos han sido:

1. configure: error: Found invalid flex version: 2.5.34. Supported flex versions are: 2.5.4

En Ubuntu 8.04 viene instalada la versión de flex 2.5.34 y la soportada es la flex 2.5.4, que ubuntu la tiene en sus repositorios como flex-old. Si vuestro caso es el mismo teneis que ir al gestor de paquetes synaptic, buscar 'flex' y de la lista que sale buscar el paquete flex instalado, marcar para eliminar completamente y un poco más abajo marcar 'flex-old'.

2. configure: error: xml2-config not found. Please check your libxml2 installation.

Si ocurre esto, hay que ir de nuevo al gestor de paquetes synaptic, buscar 'libxml2' y en la lista que nos mostrará, marcar para instalar la fila que pone 'libxml2-dev'.

El tercer paso, make, es el que se encarga de compilar. Si en este paso os dice 'failed to open stream' es porque el paso anterior se ha hecho mal, vuelve a lanzarlo y comprueba que la ultima linea no ponga algo de error. Si este paso se ejecuta con todo correcto tarda un poco en completarse y saca mucho texto por pantalla ya que compila todas las librerias que no són pocas.

Según la guía oficial de php-gtk2 hay que hacer un su, y posteriormente un make install, así pues esto sirve para acabar de instalar los paquetes con derechos de root(su), por tanto:

sudo su (os pedira contraseña)

make install

Si hasta aquí todo ha ido bien, los dos últimos pasos no darán problemas, asi que soo hay que hacer copiar y pegar de esos pasos:

echo extension=php_gtk2.so >> /opt/php5_2/lib/php.ini
/opt/php5_2/bin/php-config --extension-dir | xargs echo 'extension_dir=' >> /opt/php5_2/lib/php.ini

Ahora toca compilar todo el tema del PHP-GTK2:

cd ..
cvs -d :pserver:cvsread@cvs.php.net:/repository co php-gtk
cd php-gtk
./buildconf --with-phpize=/opt/php5_2/bin/phpize
./configure --with-php-config=/opt/php5_2/bin/php-config --with-libglade
make
make install

Y aquí, en el paso del './configure...' he vuelto a tener problemas con las versiones de mis instalaciones:

1. configure: error: PHP-GTK 2.x requires GLib 2.6.0 or higher

Se queja de que no tiene la libreria Glib adecuada, es necesario instalar 'libglib2.0-dev' para solventar este problema, así que ya sabeis, a buscarlo en el gestor de paquetes synaptic.

2. configure: error: PHP-GTK 2.x requires GTK+ 2.6.0 or higher

Más o menos lo mismo que el anterior, error de versión, en esta ocasión toca buscar en el gestor de paquetes synaptic 'libgtk2.0-dev'.

Una vez solventados estos dos problemas, que recuerdo, pueden ser distintos o no tener errores directamente en tu caso, ya que puede ser que tengas los modulos previamente instalados correctamente, sólo hay que hacer un par de instrucciones mas que no darán problemas:

make

sudo make install

El ultimo paso es hacer un enlace a la instalacion del nuevo PHP que hemos hecho:

ln -s /opt/php5_2/bin/php /usr/bin/php-gtk