Entradas

Mostrando las entradas etiquetadas como códigos

Migrar aplicación de ISO 8859-1 a UTF-8

Imagen
UTF-8 es la codificación por excelencia de páginas web al ser un formato de caracteres unicode : Unicode es un estándar de codificación de caracteres diseñado para facilitar el tratamiento informático, transmisión y visualización de textos de múltiples lenguajes y disciplinas técnicas, además de textos clásicos de lenguas muertas. El término Unicode proviene de los tres objetivos perseguidos: universalidad, uniformidad y unicidad. El 86,8 % de los sitios de internet utilizan UTF-8 , este post va dirigido al 6,4 % que sigue utilizando ISO 8859-1 . En la siguiente gráfica podemos ver la distribución de las 5 principales codificaciones de caracteres según la w3techs . Para todos los que deseen cambiar a UTF-8 (se puede aplicar a cualquier codificación de origen) deben tener en cuenta las siguientes cuestiones a modificar: La codificación de la base de datos La codificación de nuestro código fuente La codificación de nuestro PHP La codificación de nuestro servidor web Mi...

Utilizando open_basedir

Como he comentado en algunos post anteriores sobre seguridad en PHP , es muy recomendable tener configurado open_basedir. Recomiendo leer el manual oficial de PHP para tener una idea de la funcionalidad básica de esta directiva de configuración, Aquí plantearé otras preguntas diferentes. ¿Se pueden agregar unidades de red a los directorios en open_basedir? ¿Requieren alguna notación específica? ¿Los directorios son recursivos? ¿Pueden agregarse varias carpetas? Unidades de red con open_basedir Si es posible configurar unidades de red y es muy recomendable en vez de utilizar el nombre de la máquina utilizar su IP. No es necesario poner el caracter especial $ detrás del recurso compartido y para evitar errores del tipo open_basedir restriction in effect is not within the allowed path(s) en vez de especificar en la directiva el directorio concreto debemos poner la raíz. Ahora vamos con un ejemplo. Imaginemos que tenemos en la máquina 127.0.0.1 que se llama PERSONAL una capeta co...

Reduciendo el tamaño de mPDF

Imagen
mPDF es una clase PHP que genera archivos PDF desde HTML con codificación UTF-8. Se basa en FPDF y HTML2FPDF, con una serie de mejoras. Según el propio autor la librería, que ya va por su versión 6.0 y es sobre la que hablaré en este post, se creó para producir archivos PDF de diferentes idiomas al vuelo. Es más lento que los scripts originales, por ejemplo HTML2FPDF, y produce archivos más grandes cuando se usa Unicode, pero tiene soporte de estilos CSS y muchas mejoras . Pero bueno, si has llegado hasta aquí buscando como reducir el tamaño de esta librería supongo que sepas lo anterior así que vamos al grano. Este post va dedicado a todos aquellos que generan PDF pero que no requieren funcionalidades extras, en mi caso solo necesito que un HTML en español e inglés, con imágenes y estilos básicos sea convertido en un PDF de una sola página, por ejemplo el siguiente código: $mpdf = new mPDF('en-GB-x','A4','','',5,5,5,5,0,0); $mpdf->mirrorMargins =...

Nuevas funcionalidades en PHP 5.5

Una vez que hemos visto todas las ventajas que nos puede traer PHP 5.4 y sabiendo que esta no es la última versión estable sería interesante ver cuáles son las ventajas de esta para una vez decididos migrar optemos por una u otra. Generadores Una de las necesidades de programación más comunes, es ser capaz de realizar una acción sobre todos los elementos de un objeto. Por ejemplo, usando un foreach en una matriz, para obtener cada clave o, un foreach sobre un objeto, para obtener el nombre de cada parámetro y su valor. El mecanismo para la aplicación de este comportamiento es conocido como un iterador, que se utiliza para recorrer todos los elementos de un objeto o una matriz. Los iteradores se pueden definir de forma explícita con clases personalizadas, pero eso puede ser un proceso difícil de manejar y complejo, con apaños y, más que un puñado de funciones. ¿Qué pasa si quiero actuar en un subconjunto de una matriz, y realizar algo de lógica a medida que avanzo, pero aún así ser...

Pequeños cambios en PHP 5.4

Imagen
Veamos algunos de los muchos pequeños cambios realizados en el entorno de PHP 5.4. Cada uno de ellos por sí solo no justificaría un artículo independiente, pero es mejor asegurarse de ellos para que la transición a PHP 5.4 desde versiones previas no se convierta en un quebradero de cabeza. Hay una gran cantidad de cambios que se hicieron en esta actualización y algunos de ellos implican la eliminación por completo, no sólo desuso, de funcionalidades utilizadas por versiones anteriores de PHP que ya no serán compatibles, y de utilizarse obtendremos errores en nuestros archivos. Uno de estos elementos es el modo seguro . Algunas aplicaciones utilizan el modo seguro para el manejo de la seguridad en la interacción con el sistema de archivos. Esta herramienta fue creada principalmente para entornos de alojamiento compartido, pero se ha determinado que este tipo de seguridad es mejor manejarla dentro del propio servidor web o el sistema operativo. Sin embargo, eso no quiere decir que nec...

Novedades en PHP 5.4

Imagen
En el post anterior vimos por qué actualizar a PHP 5.4 en cuanto a factores de optimización del núcleo central, pero, ¿qué novedades trae esta nueva versión? Servidor web incorporado Uno de los cambios más grandes en PHP 5.4 es la adición de un servidor web incorporado. Esto nos permite utilizar PHP sin tener que instalar Apache o IIS y poder probar nuestro sitio en un instante. No es un súper servidor robusto, pero es genial para el manejo de un cierto desarrollo y pruebas en una sola máquina. Con el fin de iniciar el servidor web, la forma más fácil es navegar a la carpeta raíz de PHP y, a continuación, ejecutar PHP usando el flag S. Este servidor utiliza la carpeta public_html como raíz de los contenidos por ello debemos de crearla bajo la carpeta principal de PHP y allí ubicar todos los archivos de nuestro sitio web. php –S localhost:80 En caso de que nos salga el siguiente error failed to listen on localhost:80 (reason:Permission denied) es porque otra aplicación está utiliz...

Enviar archivos con AJAX y jQuery en HTML5

Imagen
Con la evolución de los navegadores y la llegada de HTML5 ya no es necesario utilizar librerías extras para simular subir archivos por AJAX, la mayoría de estas librerías lo que hacían era utilizar FLASH o hacer un IFRAME para capturar esta subida de archivos. Con HTML5 ya no es necesario esto. Esto es gracias a la introducción del objeto FormData que nos permite crear formularios al vuelo. Asignar un formulario existente a un objeto FormData: var formElement = document.getElementById("someFormElement");   var formData = new FormData(formElement); O puedes recorrer el formulario con jQuery para solo agregar los campos que te interesan: var formData = new FormData(); $('#someFormElement :input').each(function(){         var input = $(this);         switch (input.attr('type')){             case "checkbox":         ...

Opciones del LFTP

Unos de los gestores FTP más importantes de Linux es el LFTP, muy ligero y muy versátil y en las últimas versiones han mejorado muchísimo las opciones. He tenido que trabajar con el en un par de proyectos y aquí os dejo algunos comandos y opciones muy interesantes. Para crear un directorio solo si este no existe tenemos la opción mkdir –p /directorio. Tened en cuenta que si en la url del directorio hay subdirectorios, estos serán creados en caso de no existir. Para subir el contenido de un directorio entero tenemos la opción mirror, en la mayoría de artículos por internet utilizan esta opción para copias de seguridad con lo cual parecería que solo se pueda ejecutar este comando para sincronizar carpetas, lo cual no es el caso, por ejemplo si tienes las carpetas orígenes A, B, C y la de destino D, perfectamente puedes hacer esto: mirror –R A D mirror –R B D mirror –R C D Lo bueno de esto es que si volvemos a ejecutar uno de estos comandos solo se subirán los archivos nuevos o modif...

Zend Studio y el símbolo de euro para PHPExcel

Imagen
El que esté familiarizado con la librería de PHP para generar archivos Excel de codeplex (PHPExcel) sabe que todos los textos para que esta librería funcione correctamente deben estar en UTF-8. El problema viene cuando queremos utilizar caracteres especiales como el símbolo del euro y nuestro código está en otra codificación. Por ejemplo los proyectos en Zend Studio por defecto están en CP1252 (la mayoría de las veces se puede confundir con el estándar ISO 8859-15 pero no es lo mismo) con lo cual si queremos convertir a UTF-8 un texto sabiendo que puede contener el símbolo de euro (€) no vale con utilizar las funciones utf8_encode o utf8_decode porque ambas codifican o decodifican entre ISO 8859-1 y UTF-8. ¿Qué opciones tenemos para codificar textos en Windows-1252 a UTF-8? Existen varias herramientas ninguna de ella exenta de tener que instalar librerías adicionales aunque son bastante sencillas y universales. La primera opción es mb_convert_encoding y la segunda es iconv ...

jQuery trabajando con selects

Los tipo select en los formularios son un poco especiales y unos de los más usados, todos en internet hemos tenido que rellenar un formulario en el cual al menos siempre hay un desplegable. Aquí os dejo algunos atajos para trabajar con desplegables en jQuery. Borrar todos los datos de un desplegable $(‘desplegable option’).remove(); Eliminar todos los datos menos el primero $(‘desplegable option:gt(0)’).remove(); Obtener el valor de un desplegable $(‘desplegable’).val(); Obtener el texto del valor seleccionado en un select $(‘desplegable option:selected’).text(); Obtener el objeto DOM del valor seleccionado y no el objeto jQuery $(‘desplegable option:selected’).get(); Rellenar un desplegable desde un JSON $.each(ob, function(key, value) { $('<option />').text(key)                     .attr("value",value)            ...

jQuery validar campos numéricos

Imagen
A veces es necesario validar con JavaScript campos de texto que serán numéricos, si bien en HTML 5 esto se soluciona con los nuevos tipos de campos de texto tenemos que tener presente que es posible que nuestros usuarios no accedan a la web con un navegador moderno. Por eso es este post para mostrar una vía que permite validar campos de texto como numéricos en JavaScript . Con campos numéricos me refiero a números enteros, con decimales y con signo. Nota: recordar que las validaciones por JavaScript nunca deben ser las únicas que hagamos, siempre hay que validar los datos del lado del servidor. Para validar estos campos no voy a utilizar ningún plugin específico de jQuery que los hay, solo utilizaré la librería base y las funciones focusout y keydown . Antes que nada veamos que código ASCII tienen las teclas que nos interesa permitir: Código numérico Teclas 8 Backspace (<-) 9 Tabulador (Tab) 13 Retorno (Return) 46 Suprimir 189 y 173 Signo negativo 190 P...