Foros del Web » Programando para Internet » PHP »

Hacer un página de "Procesando" antes de mostrar los resultados de una instrucción.

Estas en el tema de Hacer un página de "Procesando" antes de mostrar los resultados de una instrucción. en el foro de PHP en Foros del Web. Hola; Estoy haciendo una aplicación que tiene una instrucción que lleva un determinado tiempo. En concreto en es buscar varias palabras en un contenido bastante ...
  #1 (permalink)  
Antiguo 08/01/2006, 16:09
Avatar de forecast  
Fecha de Ingreso: octubre-2004
Mensajes: 259
Antigüedad: 19 años, 6 meses
Puntos: 4
Exclamación Hacer un página de "Procesando" antes de mostrar los resultados de una instrucción.

Hola;

Estoy haciendo una aplicación que tiene una instrucción que lleva un determinado tiempo. En concreto en es buscar varias palabras en un contenido bastante largo a través de la instrucción substr_count... el código es éste
Código PHP:
//palabras es un vector de al menos 70 palabras

foreach ($palabras as $palabra)
{
    
$numero+=substr_count($texto,$palabra);

Este proceso lleva un tiempo considerable y como no me gustaría que los usuario pensaran que nada esta sucediendo me mostraría mostrar una página de "Procesando" y una vez finalizado este proceso mostrar los resultados obtenidos.

¿Alguién me podría decir como hacerlo?¿Como puedo saber cuando se ha acabado de ejecutar una instrucción?

Gracias.
  #2 (permalink)  
Antiguo 09/01/2006, 08:01
Avatar de turco_7  
Fecha de Ingreso: diciembre-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.044
Antigüedad: 20 años, 4 meses
Puntos: 19
hola

hago lo siguiente .. pone cualquier user y pwd ... para que veas lo que te muestra ...

http://www.academiashtar.com.ar/admin/

en realidad, lo unico en esa pagina es controlar si el usuario existe ... pero antes de empezar el control, muestro el objeto en flash... para que pareciera como un "procesando" despues de cierto tiempo, redirecciono !!!!

en tu caso siempre es lo mismo ? o el texto donde deberias buscar varia ? si es el mismo siempre, lo que tenes que hacer es controlar la cantidad de segundos que te toma ejecutar los SQL... si el texto donde tienes que buscar es variable, seria ideal que armes una funcion que de a cuerdo a la cantidad de palabras, estime aproximadamente cuando tiempo deberas mostrar el "Procesando"

si lo solucionas de otra forma ... conta como lo hiciste, y sino, espero que esto te sirva .. saludos...
__________________
Mi Blog http://turco7.blogspot.com
Usuario Linux : 404289
Mi última página: http://www.digitalservicecba.com.ar - Reparacion de camaras digitales!
  #3 (permalink)  
Antiguo 09/01/2006, 09:11
Avatar de forecast  
Fecha de Ingreso: octubre-2004
Mensajes: 259
Antigüedad: 19 años, 6 meses
Puntos: 4
Gracias Turco_7, me parece una opción interesante esperar un determinado tiempo y despues redireccionar, el problema es que mi tiempo es variable, en función de lo largo que sea el texto a analizar.

Tu opción sólo me permite poner un tiempo fijo, y por tanto no se ajusta al tiempo del proceso que sería lo ideal (ojo mi proceso no tiene nada que ver con sql). Me gustaría saber si hay alguna manera más óptima de hacerlo.

Gracias.
  #4 (permalink)  
Antiguo 09/01/2006, 09:59
Avatar de turco_7  
Fecha de Ingreso: diciembre-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.044
Antigüedad: 20 años, 4 meses
Puntos: 19
se me ocurre que podrias empezar probando cuanto tarda tu script en procesar 10Kb ... osea un txt de ese tamaño, suponiendo que probaste con 100Kb y te tarde 2 segundos ... cuando sean 200Kb seran 4 segundos ? o quizas 3 segundos ? el incremento es proporcional ??? si logras entender sobre los tiempos que demora tu script ... te seria un poco mas sencillo ... pero tenemos que admitir que varien en 1 o 2 segundos mas o menos quizas ... lo importante es que el usr sepa que se esta procesando realmente ... me parece que si averiguas como sacar el tiempo de procesado de datos .... lo tenes cocinado .. saludos
__________________
Mi Blog http://turco7.blogspot.com
Usuario Linux : 404289
Mi última página: http://www.digitalservicecba.com.ar - Reparacion de camaras digitales!
  #5 (permalink)  
Antiguo 09/01/2006, 10:07
Avatar de forecast  
Fecha de Ingreso: octubre-2004
Mensajes: 259
Antigüedad: 19 años, 6 meses
Puntos: 4
Lo que comentas parece muy interesante... si hago unos pequeños "estudios" del tiempo que tarda puedo ajustar un poco más el tiempo de espera.

Muchas gracias creo que con esto tengo para solucionar el problema

Mil gracias.
  #6 (permalink)  
Antiguo 10/01/2006, 01:59
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
Buenas.

Otra opción es usar AJAX, JavaScript asincrónico + XML. Creo que es más elegante y hasta más sólido, aunque lleva más trabajo y no funciona para navegadores viejos. (Hay muchos tutoriales sobre AJAX en la red e incluso veo que hay un foro acá, si te interesa investigar el tema. Creo que para lo que querés es ideal).

Yo hice sólo un par de cosas con AJAX, así que no soy ningún experto, pero la lógica de la aplicación sería la siguiente:

El usuario aprieta un botón en un formulario para iniciar la búsqueda. Detectás ese evento con JS y hacés un request HTTP (un pedido, va) por GET a un script php (otra página), al cual le pasás como variable el texto que introdujo el usuario. El script está en "segundo plano" y el usuario ni va a saber que existe. No lo vas a mostrar, simplemente va a hacer el "trabajo sucio". En el momento de enviar los datos, mostrás algún texto, un gif animado tipo "loading", algo en flash, lo que fuera.

El script procesa los datos y devuelve un resultado. Puede ser en forma de XML, pero si es un resultado simple, puede devolver un string común y corriente a través de una variable pasada por GET, lo cual simplifica mucho el código (no hay que parsear un XML, ni nada "raro"). En el momento en que llegan los datos, en JS se dispara un evento que te permite saber que llegaron. Ahí ocultás el "loading" y mostrás el resultado como prefieras. Y ya está. Así te asegurás que el "loading" solo se va a mostrar mientras se estén procesando los datos efectivamente y no tenés que estar adivinando cuándo van a llegar.

Suerte
  #7 (permalink)  
Antiguo 10/01/2006, 12:41
 
Fecha de Ingreso: diciembre-2005
Mensajes: 165
Antigüedad: 18 años, 3 meses
Puntos: 4
Una cosa que podria funcionar es poner una capa con un texto 'cargando' o una animacion dentro de la capa de nombre por ejemplo "capa1":

<div id="capa1" style="position:absolute;width:118px;height:20px;t op:100px;left:200px;background-color:red;visibility:visible">cargando...</div>

Y en el body:

<body onLoad="javascript:document.getElementById('capa1' ).style.visibility='hidden'">

Lo que hace esto es mostrar la capa hasta que la pagina este totalmente cargada.
Hasta luego.
  #8 (permalink)  
Antiguo 10/01/2006, 19:09
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 10 meses
Puntos: 834
Creo que esto puede servirte

http://meddle.dzygn.com/esp/weblog/barra.progreso.php/

Saludos
  #9 (permalink)  
Antiguo 10/01/2006, 19:50
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
Muy bueno, simple e ingenioso. No tenía idea de que existiera flush(). Excelente link.Gracias.
  #10 (permalink)  
Antiguo 11/01/2006, 03:12
 
Fecha de Ingreso: abril-2005
Mensajes: 139
Antigüedad: 19 años
Puntos: 1
El uso de la funcion flush lo pone como ejemplo de un query a una base de datos . Hay alguna manera de hacer una barra de subiendo archivo?
Ya que si el archivo tiene 20 MB tardara un ratito en subir.
__________________
Ciao y suerte.
  #11 (permalink)  
Antiguo 11/01/2006, 06:51
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 10 meses
Puntos: 834
Quizá Cluster o Jam1138 puedan orientarnos

No creo que pueda hacerse un filsesize a $_FILES['NOMBRE']['tmp_name'] o algo parecido. Habría que preguntarle a Cluster o a Jam1138. Lo que puede hacerse es colocar un gif animado cómo hace el webmail de yahoo cuando subís un adjunto.
  #12 (permalink)  
Antiguo 11/01/2006, 07:05
Avatar de xyyy7  
Fecha de Ingreso: enero-2004
Ubicación: Maracay.-
Mensajes: 637
Antigüedad: 20 años, 2 meses
Puntos: 5
Con php.. Definitivamente NO!

Con JavaScripts Si...

Haz un test con este codigo :

========================
Cita:
<html>
<head>
<script language="JavaScript" type="text/javascript">
function leugimload(){
document.getElementById('klap').style.visibility = "visible";
document.getElementById('wait').style.visibility = "hidden";
}
</script>
</head>
<body topmargin="0" leftmargin="0" onLoad="leugimload()">

<div id="wait"> Cargando pagina, por favor espere un momento...</div>

<div id="klap" style="visibility:hidden;">

Aqui colocas todo el cuerpo de la pagina que quieres mostrar

</div>
</body>
</html>
===================

Si le quieres agregar un entorno grafico para que se vea un poco mas profesional puedes rempalzar el texto por un objeto macromedia, o simplemente una imagen gif que simule una carga...

...espero te funcione

Saludos
__________________
Maracay Edo Aragua - Venezuela :
Mi Favorita :
http://www.MySQL.Com
  #13 (permalink)  
Antiguo 11/01/2006, 07:17
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 10 meses
Puntos: 834
Para Uploads encontré esto, pero igualmente me gustaría saber si hay manera desde php de controlar el progreso del upload:
http://www.raditha.com/php/progress.php
  #14 (permalink)  
Antiguo 11/01/2006, 07:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Pleniluni0
El uso de la funcion flush lo pone como ejemplo de un query a una base de datos . Hay alguna manera de hacer una barra de subiendo archivo?
Ya que si el archivo tiene 20 MB tardara un ratito en subir.
Directamente desde PHP .. lo que es PHP no tiene control (por lo menos en versiones PHP 4.x e inferiores) sobre el "raw" (datos en "bruto") que va subiendo por tu servidor HTTP y gestionado por PHP.

Sin embargo otros lenguajes como Perl .. si que tienen acceso a esa información como para implementar este tipo de sistemas de "barras de progreso" para un "upload" de archivos.

Un ejemplo:
http://www.raditha.com/php/progress.php

Se necesita de Perl para el proceso a nivel bajo sobre el acceso a esa información "RAW_POST_DATA". Vía PHP se llama a ese .pl y hace de interface con este.

Alguna vez vi que en PHP 5.x sería posible acceder a "RAW_POST_DATA", pero ahora no lo encuentro.

Sobre una solución PHP (con ayuda de una extensión para PHP que instalar) y Ajax:
http://blog.joshuaeichorn.com/archiv...load-progress/

Un saludo,
  #15 (permalink)  
Antiguo 11/01/2006, 07:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Panino5001
Para Uploads encontré esto, pero igualmente me gustaría saber si hay manera desde php de controlar el progreso del upload:
http://www.raditha.com/php/progress.php
Como comenté en mi mensaje anterior .. el detalle está que el servidor HTTP (Apache por lo menos) tiene o informa de un dato concreto "RAW_POST_DATA" que "algunos" lenguajes pueden acceder a leer dicha información y así obtener los datos que están "pasando" del cliente al servidor para hacer calculos y demás.

No sé si PHP 5 ya puede acceder a ese dato .. directamente sin más .. Pero por lo que he visto, no es así .. siempre requiere de algo más extra: Perl (u otro lenguaje) .. una extensión .. etc.

Un saludo,
  #16 (permalink)  
Antiguo 11/01/2006, 07:56
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 10 meses
Puntos: 834
Gracias

Ok. Muchas gracias, Cluster!
  #17 (permalink)  
Antiguo 11/01/2006, 09:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Cluster
Directamente desde PHP .. lo que es PHP no tiene control (por lo menos en versiones PHP 4.x e inferiores) sobre el "raw" (datos en "bruto") que va subiendo por tu servidor HTTP y gestionado por PHP.

Sin embargo otros lenguajes como Perl .. si que tienen acceso a esa información como para implementar este tipo de sistemas de "barras de progreso" para un "upload" de archivos.

Un ejemplo:
http://www.raditha.com/php/progress.php

Se necesita de Perl para el proceso a nivel bajo sobre el acceso a esa información "RAW_POST_DATA". Vía PHP se llama a ese .pl y hace de interface con este.

Alguna vez vi que en PHP 5.x sería posible acceder a "RAW_POST_DATA", pero ahora no lo encuentro.

Sobre una solución PHP (con ayuda de una extensión para PHP que instalar) y Ajax:
http://blog.joshuaeichorn.com/archiv...load-progress/

Un saludo,
Otro ejemplo: (usando Ajax):
http://www.devpro.it/upload_progress/

Curioso la técnica .. vía Ajax va leyendo el archivo que estamos subiendo como lo hacemos cuando realmente termina el proceso de Upload completo en condiciones normales. (o así entendí que funcionaba?, Pero .. OJO .. así como lee el archivo "temporal" no funcionará en PHP bajo "Safe Mode" u otras restricciones tipo "open_base_dir" que limiten el acceso al directorio temporal donde PHP deja los archivos que va subiendo)

Un saludo,
  #18 (permalink)  
Antiguo 11/01/2006, 15:48
 
Fecha de Ingreso: abril-2005
Mensajes: 139
Antigüedad: 19 años
Puntos: 1
Bueno ahora solo queda calentarse la cabeza a ver que se puede hacer que sea medio "profesional" por decirlo de alguna manera xd.
__________________
Ciao y suerte.
  #19 (permalink)  
Antiguo 12/01/2006, 02:50
Avatar de forecast  
Fecha de Ingreso: octubre-2004
Mensajes: 259
Antigüedad: 19 años, 6 meses
Puntos: 4
me quedo asombrado ante el número de resupuestas...

Muchas gracias a todos...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:25.