Pergunta

Existe uma maneira de mostrar uma barra de progresso em php? Eu gosto de deixar o usuário saber o que o script php está fazendo.

Aqui está um exemplo resultado do meu site http: // www.bestsellprice.com/search.php?itemnum=0&keyword=harry+potter+book

Eu tenho uma imagem de carregamento estático com algum texto que diz "Carregando ...", quando a página é totalmente carregado, eu esconder a div carregamento. Meu script php vai para o api Amazon, eBay API e tela arranhões um par de outros sites e, em vez de uma carga estática div gostaria de atualizar esse div carga com o seguinte

Carregando amazon.com

// progresso amazon, quando terminar de carregar atualização div

Carregando ebay.com

etc. etc.

Isto é possível fazer? se assim o que é a melhor abordagem? Graças antes do tempo pela ajuda!

Foi útil?

Solução

Use AJAX para pedir PHP o que está fazendo no momento, e têm um sistema de filas que define quais as tarefas estão concluídas ou não. Aqui está um exemplo muito básico:

Quando a tarefa é iniciada, torná-lo defina as seguintes variáveis:

$_SESSION['isEbayLoaded'] = false;
$_SESSION['isAmazonLoaded'] = false;

Uma vez que as cargas PHP eBay, seria definir isEbayLoaded a verdade, e, em seguida, AJAX poderia simplesmente pedir PHP se ebay foi carregado ainda, então amazon, então qualquer coisa que você necessário. Todos PHP teria que fazer é verificar se essas variáveis ??foram definidas como verdadeiro, o que significaria que as tarefas tinham sido concluídos.

Outras dicas

Eu tenho feito isso antes com uma solução muito simples:

ob_flush();

Tudo o que é necessário foi a criação de uma única div com nomes de classe apropriado:

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

Então, o meu PHP era basicamente:

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

   scrapeSite($site);
}

Este usaria um estilo de fundo para mostrar qual site você estaria raspando.

Se você deve usar marcação, você pode simplesmente imprimir um novo "Loading" Div cada vez (com uma identificação única), juntamente com um estilo para definir o estilo do div anterior para "display: none".

Claro, lembre-se que alguns navegadores exigem pelo menos 1024 bytes (poucos 4k!) Antes de processar qualquer coisa.

A melhor abordagem é ter suas chamadas ajax javascript make para o servidor e descobrir onde ele está, para que possa dar algum feedback para o usuário.

Você pode começar a ter uma barra de progresso para upload, em seguida, você apenas continuar a mostrar o progresso da aplicação.

Gostaria de fazer um pedido para cada site, e usar a saída a partir dessa página (XML, JSON, qualquer que seja) para deixar a outra página de saber o que está acontecendo.

Por exemplo ... código pseudo:

  • se reúnem locais
  • para o laço que carrega página ajax
  • página ajax retorna cada pedido com uma mensagem de status, por exemplo, - "Carregando Amazon ...."

É isso aí!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top