Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Dian Carlos

flush() PHP + AJAX - Retornar echos no processamento do arquivo php

Recommended Posts

Boa tarde galera do iMasters.

 

Passei a tarde toda pesquisando sobre isso.

 

É o seguinte.

 

Eu tenho uma requisição $.ajax:

$.ajax({
    url: 'modules/uXML/inc/capture.php',
    success: function(data){

        $('div#xml-retorno').append(data);

    }
});

E tenho um arquivo em PHP (capture.php)

@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);
@ini_set('implicit_flush', 1);

for ($i = 0; $i < ob_get_level(); $i++){ob_end_flush();}

ob_implicit_flush(1);

$i = 0;

while($i < 5){
echo $i . '<br / >';

    flush();
    sleep(1);

$i++;
}

Eu quero que, a cada loop do while, os echos que forem retornados devem aparecer no sucess do $.ajax. Eu já vi um exemplo funcionando, mas não consegui fazer também.

 

O que achei foi esse flush(); do PHP, onde parece que ele força o arquivo mandar o resultado na hora que foi criado, e não no final de tudo.

 

Preciso disso pois estou criando um sistema de log na tela, onde a cada laço uma mensagem deve ser exibida.

 

Então galera, o que estou fazendo de errado?

Agradeço a ajuda de todos..

 

Boa tarde..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, analisando seu código, a única coisa que vejo é que o resultado demorará 5 segundos para retornar, nada mais... :closedeyes:

 

Quando é que você chama esse Ajax? Obviamente que esse PHP é só um exemplo, mas o que pretende retornar via Ajax?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara só consegui fazer isso usando iframe, crio um elemento iframe com JS ele roda em background usando o flush() e nele dou os prints com as funções de loading em JS.

 

Estou saindo aqui por isso poste meio corrido...rs. mais tarde volto ae.

 

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Paulo.. Na verdade isso que eu quero fazer não é tão necessário para o que realmente preciso. Mas seria interessante para o usuário.

 

O cliente quer um sistema que leia XMLs (XMLs de notícias da Agência O Globo, que eles fornecem em uma pasta no FTP do site) em uma pasta, e coloque os dados desses XML automaticamente no banco de dados, então eu quero retornar um LOG, mostrando o que o sistema está fazendo. Então estou usando jQuery para rodar esse $.ajax de minuto a minuto, e o resultado do PHP é retornado dentro de uma div.

 

Obs.: Já tenho o sistema que lé o XML e coloca no banco de dados, mas é todo manual, o cliente tem que selecionar os arquivos.

 

Não tenho o sistema todo pronto ainda, mas o que quero é isso: "Encontrou os arquivos que não são repetidos? Mostra um echo, colocou ele no banco? Mostra um echo escrito SUCESSO, e assim sucessivamente..

 

Quero isso por que, alem desse sistema de log que estou fazendo, isso me ajudaria a melhorar alguns módulos no CMS de minha empresa pros clientes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pra que esse for?

 

Uma vez eu utilizei essa tecnica pra fazer um progressbar pra um sistema de importação de planilhas.

 

Mas eu não coloquei o flush dentro do laço, coloquei ele antes, e antes do flush coloquei um ob_flush.

 

Além disso, eu tinha tentando usar o ini_set('implicit_flush',1), no fim eu comentei isso, não precisou, mas usei um tal de ini_set('output_buffering','on');

 

E ainda tive que tirar alguns limites do servidor, de timeout, tempo máximo de execução, e memoria.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@jhrhp, eu peguei esse código pronto na internet, nos vários exemplos que vi, mas é tudo em inglês.

 

Na verdade, eu não sei muito bem pra que que server, essa função flush(); e ob_flush(); eu nem sabia que existiam..

 

Mas ai? Como vc fez a progress bar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.