Exportar datos a Excel con PHP

Excel

Cuando queremos que el usuario pueda exportar los datos desde una aplicación web para poder abrirlos como una hoja de cálculo lo más recomendable es hacerlo en formato CSV (Comma-Separted Values) Ahora bien, hay casos en que el cliente insiste en que desea que se le abra inmediatamente su Microsoft Excel al hacer click sobre el link o botón. En estos casos, cuando generamos el fichero «al vuelo», la cabecera debe ser:

header('Content-Type: application/vnd.ms-excel');

En vez de:

header('Content-Type: text/csv'; charset=utf-8);

Si los datos contienen caracteres más allá de los primeros 128 ASCII, por ejemplo acentos, al abrirse Excel veremos que estos caracteres no se visualizan correctamente. ¿Por qué? Aunque UTF-8 es de lejos la codificación más usada en la web, y lo más probable es que tu aplicación trabajé con ella, Microsoft Excel sorprendentemente no trabaja con este formato por defecto. Los de Redmond pueden haber perdido parte de su poder pero no su idiosincrasia. ¿Cómo arreglar este desaguisado? Pasando los datos a UTF-16LE (Lower Endian) e indicando la codificación en la cabecera, pues con esta codificación sí trabajan. Para lograrlo, PHP dispone de una función para convertir codificaciones: mb_convert_encoding()

El siguiente código de ejemplo deshace el entuerto. En $participations tenemos los datos a exportar, es un array. En este caso concreto, el código pertenece a una vista y por lo tanto el array ha llegado desde un controlador. El array $header contiene el nombre de cada columna para la hoja de cálculo y $fields contiene los índices de $participations, que coinciden con los nombres de los campos en la base de datos. Sigue leyendo

Los campos meta que Facebook impone

Facebook imponiendo su criterio en la web (todavía libre):

Resultados de la herramienta Sharing Debugger de Facebook al procesar una URL

Pueden deducirse todos todos los valores de otros meta tags pero no le gustan que no sean estrictamente los suyos. Y no son pocos, aquí sólo unos cuantos:

<meta property="og:type" content="website" />
<meta property="og:title" content="Título de la página" />
<meta property="og:description" content="Descripción de la página" />
<meta property="og:site_name" content="bla bla bla" />
<meta property="og:url" content="http://www.bla.com/lang/bla-bla-bla/bla/" />
<meta property="og:image" content="http://www.bla.com/images/bla/1/bla.jpg" />

Sigue leyendo

Nuevo proyecto ya finalizado: BuscaChico

Acabamos de sacar el sitio BuscaChico. Se trata de un sitio web de contactos, información y noticias de interés para la comunidad gay de Latinoamérica y España. Para su realización VIC Services ha contado y cuenta con colaboradores para tareas como la creación de contenidos de interés para la comunidad o el diseño gráfico. Ésta vez ha sido un proyecto propio, no para otra empresa, como había sido la tónica habitual. En lo que sí hemos seguido nuestra tónica habitual es en poner lo mejor de nosotros mismos.

Consta esencialmente de una parte pública que de momento está compuesto por un blog donde lo usuarios pueden comentar y otra parte más amplia y compleja donde sólo pueden acceder los usuarios registrados donde éstos tienen un perfil, pueden buscar a otros usuarios y comunicarse con ellos. En el futuro iremos ampliando tanto la parte pública como incorporando nuevas funcionalidades en la privada, teniendo en cuenta el feedback que nos proporcionen los usuarios.

Tenemos muchas expectativas e ilusiones puestas en BuscaChico. Vamos a convertirlo en un sitio de referencia para la comunidad y de utilidad para la misma. El software creado para el sitio está preparado para el fuerte crecimiento que esperamos en tránsito y número de usuarios.

Cómo instalar XCache en un servidor compartido

La semana pasada quise instalar en un servidor compartido (Hostmonster para más señas) alguno de los diferentes sistemas de caché que existen para PHP. El único que ofrecen es un paquete de PEAR llamado “Cache” pero necesitaba instalar Apc, Xcache, MemCache o Redis. Me puse en contacto con su departamento técnico para consultar si era posible y la respuesta fue un no. Como cuando instalamos Subversion tampoco fueron ni muy optimistas ni proactivos, no hice demasiado caso a su respuesta y me lancé a intentarlo. Como Apc parecía que iba a ser problemático pues por lo que leí necesitaba ser root, lo intenté con Xcache. En primer lugar, en el directorio “home” de mi usuario en Hostmonster creé los directorios y bajé la versión de xCache para la versión de PHP que corre el servidor:

  1. mkdir modules xcache
  2. wget http://xcache.lighttpd.net/pub/Releases/1.3.2/xcache-1.3.2.tar.gz

Después descomprimí el módulo y lo compilé para la versión de PHP del servidor:

  1. tar -zxf xcache-1.3.2.tar.gz
  2. cd xcache-1.3.2
  3. phpize
  4. ./configure –enable-xcache
  5. make

Compruebo que esté bien:

  1. make test

Y ya sólo queda mover el módulo recién compilado a su directorio de destino:

  1. cd modules
  2. mv xcache.so /home2/usuario/modules

Ahora debemos editar php.ini para que PHP empiece a trabajar con Xcache. Añadí las siguientes líneas:

  1. zend_extension = /home2/usuario/modules/xcache.so
  2. zend_extension_ts = /home2/usuario/modules/xcache.so
  3. xcache.shm_scheme = «mmap»
  4. xcache.size = 32M
  5. xcache.count = 8
  6. xcache.slots = 8K
  7. xcache.ttl = 0
  8. xcache.gc_interval = 0
  9. xcache.var_size = 16M
  10. xcache.var_count = 1
  11. xcache.var_slots = 8K
  12. xcache.var_ttl = 0
  13. xcache.var_maxttl = 0
  14. xcache.var_gc_interval = 300
  15. xcache.test = Off
  16. xcache.readonly_protection = Off
  17. xcache.mmap_path = «/dev/zero»
  18. xcache.coredump_directory = «»
  19. xcache.cacher = On
  20. xcache.stat = On
  21. xcache.optimizer = Off
  22. xcache.coverager = Off
  23. xcache.coveragedump_directory = «»

También le podemos añadir un usuario y contraseña, ésta última debe ir “hashed” con md5 según explica la documentación:

  1. xcache.admin.user = «nombre_del_usuario»
  2. xcache.admin.pass = «4c882dcb24bcb1bc225391a602feca7c»

Para que la configuración tenga efecto deberíamos reiniciar los procesos fcgiphp5 pero eso no es siempre posible en un servidor compartido, así que no me quedó otra que esperar a que ello sucediera. Se pueden ver los procesos de la siguiente forma:

  1. ps aux | grep fcgiphp5

A continuación obtenemos la id del proceso y mediante kill mandamos la señal para matarlo. En todo caso, sea de este modo o bien esperando, en el resultado de phpinfo() deberíamos ver esto si XCache está funcionando correctamente:
XCache correctamente instalado

Configuración XCache

Configuración XCache

Instalarlo es muy fácil, ¿verdad? A continuación me puse otra vez en contacto con ellos para preguntarles si tenían algún inconveniente con la instalación pues mejor prevenir a que deshabiliten la web y su respuesta fue que no veían ningún inconveniente. Como pueden observar, en este tipo de servicios de alojamiento web es mejor ser proactivo y lanzarse a ver si es técnicamente posible.

¿Dónde están los hackers?

Cuando en los años 80 se popularizó el módem en los EUA y en menor medida en Europa, empezaron a salir en los medios de comunicación noticias sobre individuos, generalmente varones jóvenes, que habían conseguido acceso ilegítimo a ordenadores de grandes empresas, bancos, universidades e instituciones gubernamentales, a los que calificaban como «hackers». Aunque no sea el término adecuado así han sido bautizados hasta día de hoy. Para conocer mejor qué significan términos ingleses como hacker, cracker y otros se puede consultar The Jargon File, mantenido por Eric S. Raymond.
Sigue leyendo