Pregunta

¿Hay alguna forma de mostrar una barra de progreso en php? Me gusta que el usuario sepa lo que hace el script php.

Este es un ejemplo de resultado de mi sitio web http: // www.bestsellprice.com/search.php?itemnum=0&keyword=harry+potter+book

Tengo una imagen de carga estática con un texto que dice " Cargando ... " ;, cuando la página está completamente cargada, oculto la división de carga. Mi script php va a la api de amazon, la api de ebay y la pantalla raspa un par de otros sitios y en lugar de un div de carga estática, me gustaría actualizar ese div de carga con lo siguiente

Cargando amazon.com

// progress amazon, cuando termine de actualizar la división div

Cargando ebay.com

etc. etc.

¿Es esto posible hacer? Si es así, ¿cuál es el mejor enfoque? Gracias de antemano por la ayuda!

¿Fue útil?

Solución

Use AJAX para preguntar a PHP qué está haciendo en este momento, y tenga un sistema de colas que defina qué tareas se completan o no. Aquí hay un ejemplo muy básico:

Cuando se inicie la tarea, haga que establezca las siguientes variables:

Use AJAX para preguntar a PHP qué está haciendo en este momento, y tenga un sistema de colas que defina qué tareas se completan o no. Aquí hay un ejemplo muy básico:

Cuando se inicie la tarea, haga que establezca las siguientes variables:

<*>

Una vez que PHP cargue eBay, establecerá isEbayLoaded en verdadero, y luego AJAX podría simplemente preguntarle a PHP si se ha cargado ebay todavía, luego amazon, y cualquier otra cosa que necesites. Todo lo que PHP debería hacer es verificar si esas variables se establecieron como verdaderas, lo que significaría que las tareas se habían completado.

SESSION['isEbayLoaded'] = false;

Use AJAX para preguntar a PHP qué está haciendo en este momento, y tenga un sistema de colas que defina qué tareas se completan o no. Aquí hay un ejemplo muy básico:

Cuando se inicie la tarea, haga que establezca las siguientes variables:

<*>

Una vez que PHP cargue eBay, establecerá isEbayLoaded en verdadero, y luego AJAX podría simplemente preguntarle a PHP si se ha cargado ebay todavía, luego amazon, y cualquier otra cosa que necesites. Todo lo que PHP debería hacer es verificar si esas variables se establecieron como verdaderas, lo que significaría que las tareas se habían completado.

SESSION['isAmazonLoaded'] = false;

Una vez que PHP cargue eBay, establecerá isEbayLoaded en verdadero, y luego AJAX podría simplemente preguntarle a PHP si se ha cargado ebay todavía, luego amazon, y cualquier otra cosa que necesites. Todo lo que PHP debería hacer es verificar si esas variables se establecieron como verdaderas, lo que significaría que las tareas se habían completado.

Otros consejos

He logrado esto antes con una solución realmente simple:

ob_flush();

Todo lo que se requería era crear un solo div con los nombres de clase apropiados:

<div class="loading">
    Loading...
</div>

Entonces, mi PHP era básicamente:

foreach ($sites as $site) {
   printAndFlush(<<<CSS
     <style>
       div.loading {
         background: url($site.png) no-repeat right center;
       }
     </style>
CSS;

   scrapeSite($site);
}

Esto usaría un estilo de fondo para mostrar qué sitio estarías raspando.

Si debe utilizar el marcado, simplemente puede imprimir un nuevo " Cargando " div cada vez (con una ID única), junto con un estilo para configurar el estilo del div anterior en " mostrar: ninguno " ;.

Por supuesto, recuerda que algunos navegadores requieren al menos 1024 bytes (¡algo de 4k!) antes de renderizar algo.

El mejor enfoque es hacer que su javascript realice llamadas ajax al servidor y averigüe dónde se encuentra, para que pueda dar algún comentario al usuario.

Puedes comenzar con una barra de progreso para cargar, y luego solo continúas mostrando el progreso de la aplicación.

Haría una solicitud para cada sitio y usaría el resultado de esa página (XML, JSON, lo que sea) para que la otra página sepa lo que está pasando.

Por ejemplo ... código psuedo:

  • recopilar sitios
  • para el bucle que carga la página ajax
  • la página ajax devuelve cada solicitud con un mensaje de estado, p. ej. - " Cargando Amazon .... "

Eso es todo!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top