PHP: Error al descargar archivo dinamico PDF desde Internet Explorer

Hace unas semanas hice una página que descarga un archivo XML y un PDF para unas facturas electronicas, todo bien hasta que se probo la descarga en Internet Explorer (para variar siempre problemas con este navegador)

El codigo que tenia era algo como esto:

<br /> header("Content-Type: application/pdf");<br /> header("Content-Disposition: attachment; filename="factura_A8.pdf");<br /> header("Expires: Fri, 16 Jun 1981 01:00:00 GMT");<br /> header("Last-Modified: . gmdate("D, d M Y H:i:s") . " GMT");<br /> header("Cache-Control: no-store, no-cache, must-revalidate");<br /> header("Pragma: no-cache");<br /> header("Cache-Control: post-chack=0, pre-check=0",false);<br /> 

La idea es generar un archivo PDF dinamico y despues bajarlo mediante una página especial, y lo del no-cache lo tenia para asi siempre tener la versión más nueva del servidor, pero como les comentaba en explorer me tiraba el siguiente error:

Internet Explorer no puede descargar …..

Internet Explorer no puede abrir este sitio Internet. El sitio solicitado no está disponible o no se encuentra. Intente de nuevo más tarde.

Y pues esta raro el mensaje ya que en Firefox, Opera, Safari si funciona la liga de la descarga, investigando más sobre este tema resulta que el error viene en la parte del no-cache así que tenemos que eliminar esas lineas y dejar el código como sigue:

<br /> header("Content-Type: application/pdf");<br /> header("Content-Disposition: attachment; filename="factura_A8.pdf");<br /> header("Expires: 0");<br /> header("Pragma: cache");<br /> header("Cache-Control: private");<br /> 

Y listo ya funciona la descarga del archivo PDF desde el Explorer :D

Humor: Camera Café – Abusos

No lo se pero me siento algo identificado con este video!!…


Camera Café – Abusos

Y para los que no saben que es un pringao aquí les dejo la descripción de uno (pirateado de la frikipedia):

———————————————-

Persona de carácter altruista y generoso merced al cual termina por ser embaucada en absurdos proyectos o tareas que no le van a reportar ningún tipo de beneficio y sí muchos dolores de cabeza, y que ayudan al desinfromado en problemas que según ellos sólo tienen soluciones como decirles en el Méssenller “ayudaaaaaa!!!! urgent!!!!” o en otros casos “q hag0o0ooooo!!!”.

Habitualmente se aplica el término “pringao” a personas relacionadas con el mundo de la informática, debido principalmente a la bondad innata de estos profesionales o aficionados (no importan titulaciones, si saben que “controlas” acabarán llamándote) y a la soltura de la gente de su entorno a la hora de reclamar sus servicios.

Un pringao jamás se niega a ninguna tarea por penosa, ridícula o humillante que esta sea. Su especialidad es el mantenimiento de PCs con sistema operativo de la empresa Hasecorp a todos los niveles: desde conectar un módem USB hasta reinstalar todo el software las veces que haga falta. Cabe hacer hincapié en la presencia del sistema Hasecorp, ya que de no existir este los servicios del pringao son completamente prescindibles. Todo pringao digno de llamarse así basa su existencia en la presencia próxima de personas conocidas propietarias de un ordenador con este tipo de sistema operativo.

Un pringao nunca recibe ningún tipo de remuneración o gratificación por las tareas que realiza. Asimismo sus condiciones laborales suelen ser pésimas, aunque se han dado casos en los que se le ha permitido fumar en su puesto de trabajo o incluso irse a dormir a una hora decente. Por otro lado, sus responsabilidades son siempre enormes; de él depende que los sistemas informáticos de sus conocidos funcionen correctamente, así como la instalación y mantenimiento de los futuros periféricos que vayan adquiriendo estas personas a lo largo de la vida útil de su equipo.

———————————————-

Y si aun no saben si son un pringao, aqui esta el manual: Pringao Howto (o Windows-es-fácil-Howto), altamente recomendable darle una buena leída en algún tiempo de ocio!.

Y para rematar el post!!, aquí esta la frase de la semana:
* > Un cafe?
* >> No tiene RAM

Que tengan buen Domingo!!!!!

jqGrid: Tablas super-dinamicas

Hoy estaba buscando como crear tablas dinámicas (datagrid) de forma sencilla con Javascript y me encontré con varias opciones, entre ellas pongo las 2 que me parecieron interesantes y la que más me gusto:

Flexigrid:

* Redimensiona columnas.
* Redimensiona ancho y alto del grid.
* Ordena por la cabecera de la columna.
* Apariencia amigable.
* Puede convertir una tabla ordinaria.
* Se conecta con datos a través de AJAX (XML y JSON).
* Paginado.
* Permite ocultar columnas.
* Barra de herramientas (toolbar).
* Permite búsqueda.

jQuery Grid:

* Redimension de columnas
* Ordenamiento de datos
* Agrupación por pagina
* Estilos a columnas y registros
* Acepta datos a través de AJAX o manualmente ya sea: XML, JSON, Array
* Selección multiple de renglones
* Agregar, editar, eliminar y buscar registros
* Sub-tablas y tabla de detalles
* Reajustar tamaño de la tabla
* Diferentes tipos de entradas (textbox, checkbox, textarea)
* Es veloz con muchisimos datos a cargar

En realidad me quede con JQuery Grid (JqGrid) ya que al ver las caracteristicas y el diseño me agrado más, ademas la sintaxis es muy simple y casi intuitiva (digo, ocupas saber algo de Javascript y conocer que es JSON)

Algo que me gusta es que se parece a una tabla de Excel y como ahorita estoy haciendo un sistema que se esta migrando de Excel a la Web mediante PHP, pues esto me cae de perlas!!.., justo lo que necesito!!.

* Más ejemplos de JqGrid, muy recomendable visitarla para ver todo el poder de JQuery Grid
* Página principal de JqGrid
* Descargar JQuery Grid

Como capturar la tecla en Javascript

Aquí traigo un “truco” para capturar la tecla en Javascript y así poder limitar ya sea que escriban solamente números, letras, letras y números, caracteres especiales, etc, etc….

El código es muy sencillo de implementar, simplemente en su input pongan lo siguiente:

< input onKeyPress="return soloNumeros(event);"

Y en su función llamada soloNumeros ponen algo como lo siguiente:

<br /> function soloNumeros(e){<br /> var tcl = (document.all)?e.keyCode:e.which;<br /> if ((tcl >= 48 &#038;&#038; tcl < = 57) || tcl == 8 || tcl == 0){<br /> return true;<br /> }else{<br /> return false;<br /> }<br /> }<br /> 

Ahora para entender este código en su input en el onKeyPress (osease cada vez que presionan una tecla se manda llamar la función mandando el evento) se llama la función que verifica que tecla presionaron.

Ahora la parte donde dice var tcl = …., de la función es para capturar el número de tecla, ese código es compatible con todos los navegadores tanto IE, Firefox, Safari, Opera ….. y ya ponen su IF que quieran!, los números son del código 48 al 57 y pues los otros son el codigo 8 retroceso y el 0 para otros caracteres que no se captura como las flechas, supr. ya si quieren el enter pongan el 32.

De todas formas pueden imprimir con un alert(tcl) y así verán los codigos., sigamos con la función onKeyPress, si regresa un true se imprime la tecla, si es false simplemente no imprime nada!.

Y listo!! a programar con Javascript!!

Linux vs Windows parte 2

Siguiendo con los videos sobre la eterna lucha entre Linux contra Windows aquí esta otra pequeña recopilación de algunos videos (ahora si Tux tiene la victoria no como en las otras peleas)


Linux vs Clippo

Gates vs Tux

Tux in the ring

Linux vs Bill Gates

No olviden que solamente son videos “chistosos”, y al final de cuenta el que gana la batalla es para lo que se use el sistema operativo como medio ya sea en el área de servidores, juegos, procesadores de texto!.., aunque eso si!, GNU/Linux ya la tiene de ganar simplemente por ser Software Libre.

Desinstalar el Anti-Virus ViRobot Management Server

Desde hace un año aprox se instaló el Antivirus ViRobot versión de prueba, y resulta que ya hemos cambiado de proveedor de antivirus por el Nod32, pero existe un problema al desinstalar te pide una clave y como el tiempo es largo y la memoria es corta pues se nos olvido la contraseña :’(

Buscando en internet el password por default del VMS es: agentdown

Por si alguien tiene el mismo problema pues ya saben!!, primero no instalen este antivirus y segundo ya tienen la clave de desinstalación.

Javascript: Preview de un Textarea con saltos de linea.

Hace unos días tuve un problema con una caja de texto multilinea (TextArea) en la cual llamaba una función que lo que se escriba en el formulario se pasara a un DIV para tener una vista previa del texto. Todo sería tan fácil como tener una función similar a esta (Usando prototype para obtener el objeto, en lugar de document.getElementById):

<br /> function GenerarPreview(texto,mydiv){<br /> $(mydiv).innerHTML = texto;<br /> }<br /> 

Pero resulta que existe un problema técnico, ya que cuando escribes un salto del linea (enter) en el texarea, en el preview no funcionan y pone todo corrido, resulta que el código del enter, en este caso un /n (como si fuera un archivo de texto) no lo reconoce el parser del HTML, sino que se tiene que reemplazar por un
, podríamos tener una función que busque letra por letra el enter o el carácter 13: chr(13) pero por alguna extraña razón nunca me funciono, hasta que encontré la solución fácil y sin tener que hacer un ciclo para buscar letra por letra, es modifica la función a algo como esto:

<br /> function GenerarPreview(texto,mydiv){<br /> $(mydiv).innerHTML = texto.replace(/n/g, "<br />");<br /> }<br /> 

Y listo!!!, ya en nuestro DIV aparecera con saltos de linea!.

Parte 2: Parecidos razonables en el logo de Google Chrome

Siguiendo con el parecido del logo del navegador Google Chrome que era una copia de las pokebolas, he encontrado otra posibilidad que pudo ser la idea inicial del logotipo, se trata de una aplicación llamada ThinkFree Office, en donde aparece el logotipo al instalar la aplicación (ya que el logo oficial de la página es muy diferente).


StoryBlender.com, conspiracy of Google Chrome

En la página de digital inspiration podemos encontrar más logotipos con un parecido razonable, llegando al extremo que hasta el logotipo de Mozilla Firefox y las Webcam son culpables del logo, tambien en GenBeta se pueden ver más imágenes como el logotipo del canal de televisión TV Record de brasil.

Y tú donde has visto el logo de Google Chrome?.

[Actualizado]
Navegando por la página de Apple, más especificamente en la sección de descargas me encontre con el logo de ThinkOffice, primero pense que era un gadget de Apple para Chrome por aquello del logo que es similar, pero leyendo ya me di cuenta que se trataba de la suite tipo Office,

No se pero presiento que la siguiente noticia relacionado a este tema sera una demanda por plagio de logotipo!! jeje.., en fin!! veremos que sucede.

Google cambia la licencia del navegador Chrome

Como ya informe antes, Google no respetaba nuestra privacidad y ellos se adjudicaban todo el material publicado desde el navegador web Google Chrome, pero como es de humanos rectificar y más cuando se trata de una empresa realmente seria y comprometida con el desarrollo de nuevas tecnologías y el Software Libre, Google ha cambiado el punto 11 del EULA, por el siguiente texto:


1. Su licencia del Contenido

11.1 Conservará los derechos de autor y cualquier otro derecho que ya posea del Contenido que envíe, publique o muestre en los Servicios o a través de ellos.

Y respecto al tema OpenSource el Chrome no lo es, pero su hermano menor llamado Chromium (es el elemento químico Cromo) si lo hes, y pueden descargar su código fuente! (de hecho usa la licencia BSD) y compilarlo en Linux, Mac ó Windows, aunque por el momento para Linux no se tiene una interfaz gráfica, pero para Windows ya pueden empezar a descargar e instalarlo, solo vean el archivo LATEST para ver la ultima revisión y dentro de la carpeta de la revisión van a ver un archivo llamado mini_installer.exe, haa pues ese es el bueno para instalar Chromium para Windows (y porque no para Linux con ayuda de Wine).