Google
Web dns.bdat.net

Re: [PHP-ES] Como generar dos outputs...

From: Vladimir Hernandez ( vladimir(EN)inter-connect.us)
Date: Mon Nov 15 2004 - 11:26:59 CET


On Monday 15 November 2004 03:39 pm, Ferran Orsola wrote:
> Hola gente,
>
> Tengo una web en PHP 5 con base de datos mysql.
>
> Una de las funciones de dicho site tiene que ser la generacion de cierta
> information de la base de datos en CSV. La funcion de generar el CSV ya
> esta hecha y funciona de fabula, mediante un formulacio para seleccionar
> los criterios de busqueda y una libreria en PHP que genera el CSV.
>
> Para mas informacion mirar el siguiente codigo:
>
> <?php
> include("library.ini.php");
> authentication(0);
>
> include("statistics.ini.php");
>
> $response = createStatistic($_POST);
>
> $len = strlen($response);
>
> //Avoid bug in IExplore
> header("Pragma: ");
> header("Cache-Control: ");
> header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
> header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
> header("Cache-Control: post-check=0, pre-check=0", false);
> // END
>
> header("Content-type: text/csv\n");
> header("Content-disposition: inline; filename=statistics.csv");
> header("Content-transfer-encoding: binary\n");
> header("Content-length: $len\n");
>
> echo "$response";
>
> ?>
>
> Evidentemente el form del cuestionario apunta a esta pagina.
>
> El problema que tengo es que quiero que sacar un pagina de gracias y a
> la vez generar el CSV. El rpoblema es que si genero una pagina
> intermedia y luiego lanzo este codigo se crea un error ya que el headers
> ya esta definido como texto/html.
>
> Alguien sabe como cerrar un output y text/html y luego crear otro
> text/csv? O alguna otra idea para poder hacer lo que quiero?
>
> A veces ademas si el CSV tarda mucho tiempo en generarse se crea un time
> out, para evitar esto me gustaria tener una pagina intermedia con una
> barra de tiempo y que cuando acabe se genere la pagina de gracias y el
> CSV. Sabeis como hacer esto???
>
> Me iria muy bien algun codigo parecido para ver como lo habeis hecho.
>
> Gracias a todos,
>
> Ferran Orsola
>
> P.D.: Por cierto alguno de vosotros sabe si existe Internet Explorer
> para linux? Lo necesito para probar mis javascripts para plataformas
> microsoft. No quiero recurrir a instalar una particion para windows en
> mi laptop solo para probar eso, linux me gusta mucho mucho mas, no se
> porque :-)

Una cosa a la vez:

- Para una página intermedia no hay, que yo sepa, el truco perfecto. Lo que yo
he hecho es cargar la página de "please wait", y hacer un OnLoad con
JavaScript en <body> que me envíe al script que generará el archivo de texto,
en tu caso CSV.

- Otra solución, menos elegante pero más confiable (pues algunas personas
deshabilitan JavaScript en sus máquinas) es la de poner un header("Location:
mi_script.php"); donde mi_script.php es el que genera el archivo de texto.
Esto se manda llamar desde el script principal con el formulario que
mencionabas, y mi_script.php no genera salida a STDOUT, sino que directamente
envía un header content-type/ text.

- Si mal no recuerdo, el timeout es controlable

- Para usar IE en Linux, recomiendo CrossOver Office
(http://www.codeweavers.com). Funciona bien para ese propósito, y es rápido
de instalar. Hay otra opción que no he utilizado, Win4Lin
(www.netraverse.com), es más costoso pero supuestamente con mayor
compatibilidad.

Vladimir

-- 
<FONT COLOR="009999"><I>Inter-Connect
Web Design and Translations
Diseño de Páginas de Internet y Traducciones
www.inter-connect.us</I></font>
-- 
PHP Spanish Localization Talk Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


This archive was generated by hypermail 2.1.7 : Wed Jan 26 2005 - 23:58:52 CET