Ir para conteúdo

Arquivado

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

Wilker

metodos anti-refresh

Recommended Posts

e galera, td beleza?

 

o negocio eh o seguinte... eu consegui descola um geito em PHP para evitar ter q ficar dando refresh (para scripts + ativos). o geito foi assim:

 

PHP [/tr][tr]//primeiro vamos tirar o tempo maximo de execucao

set_time_limit(0);

 

//comecar um loop infinito

while(1) {

//aki devem ficar as acoes que devem ser executadas

//agora vamos parar o script por 1 segundo, para n sobrecarregar

sleep(1);

}

[/tr]

 

bom, isso funciona... mais soh no IIS!! no apache essa sintaxe n funciona...

por que?

simples: no IIS os dados sao mostrados enquanto eles saum carregados, dessa forma ele vai carregando e mostrando, ja no Apache, ele espera o script ser completamente carregado para depois exibir... e como o script nunca sera carregado...

 

bom, isso eh uma teoria minha, n tenho certeza nenhuma disso...

 

o kso seria, alguem tem alguma outra ideia, ou sabe outra forma de fazer um metodo de carregamento constante sem refresh??

 

quem tiver alguma ideia ou sugestao pra fazer isso posta ai.

 

flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

estranho n funcionar...aki pelo menos, no easyphp, rodando apache, funcionou..pode se usar o for(; ;) { } mas é a mesma coisa...

pois eh kra... o meu webchat eu fiz montado nessa estrutura ai, soh q todo mundo q usa apache me disse q o webchat n tava funcionando... ai veio o problema...

Compartilhar este post


Link para o post
Compartilhar em outros sites

vcs tão certos, o apache (em *nix pelomenos) só larga a página quando ela foi completamente processada! Oque podem fazer é usar Output Buffering

kra... dei uma olhada nisso... mais n vi nada mto util pra esse kso n... caso tenha explica ai plzeu tenho fe que exista algum header que me ajude com isso...

Compartilhar este post


Link para o post
Compartilhar em outros sites

com essas funções de controle de buffer tu pode fazer assim

PHP [/tr][tr]

ob_start();

echo "balblalbalbalblablabla";

//ate aqui nada foi enviado pra browser, ta tudo guardado num buffer!

ob_end_flush();

//agora sim ... todo conteudo do buffer foi descarregado!

[/tr]

 

no teu caso, tu podes colocar um ob_flush depois do sleep(1) e daí o php força o apache a enviar o conteúdo para o navegador!

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu nunca trabalhei com loop infinito... mas como usa-lo em aplicacoes para web?usando como exemplo o seu chat...while(1) {echo "passou por aqui";sleep(1);}se eu executo este script ele vai ficar carregando sem fim.. e n exibe nada...como fazer para exibir o texto, num chat por exemplo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

com essas funções de controle de buffer tu pode fazer assim

PHP [/tr][tr]

ob_start();

echo "balblalbalbalblablabla";

//ate aqui nada foi enviado pra browser, ta tudo guardado num buffer!

ob_end_flush();

//agora sim ... todo conteudo do buffer foi descarregado!

[/tr]

 

no teu caso, tu podes colocar um ob_flush depois do sleep(1) e daí o php força o apache a enviar o conteúdo para o navegador!

tentei usar isso ai kra... mais deu na mesma... valew ai pela intencao... o negocio eh continuar tentando

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu nunca trabalhei com loop infinito... mas como usa-lo em aplicacoes para web?

 

usando como exemplo o seu chat...

 

while(1) {

echo "passou por aqui";

sleep(1);

}

 

se eu executo este script ele vai ficar carregando sem fim.. e n exibe nada...

 

como fazer para exibir o texto, num chat por exemplo?

bom kra, esse eh realmente o ponto pelo qual esse topico procura arrumar...

 

usa esse codigo aki:

 

PHP [/tr][tr]

<?php

 

set_time_limit(0);

 

echo "<script> /*vsdhuvsdiovhsdivhvioshvfoihiovhdiohiofh ioh iodshv iosvh iosdhio sdhfv ioshdfv ihsdiovh sdiof hfiosdh iosh iodh is*/ </script>";

echo "<script> /*vsdhuvsdiovhsdivhvioshvfoihiovhdiohiofh ioh iodshv iosvh iosdhio sdhfv ioshdfv ihsdiovh sdiof hfiosdh iosh iodh is*/ </script>";

echo "<script> /*vsdhuvsdiovhsdivhvioshvfoihiovhdiohiofh ioh iodshv iosvh iosdhio sdhfv ioshdfv ihsdiovh sdiof hfiosdh iosh iodh is*/ </script>";

echo "<script> /*vsdhuvsdiovhsdivhvioshvfoihiovhdiohiofh ioh iodshv iosvh iosdhio sdhfv ioshdfv ihsdiovh sdiof hfiosdh iosh iodh is*/ </script>";

echo "<script> /*vsdhuvsdiovhsdivhvioshvfoihiovhdiohiofh ioh iodshv iosvh iosdhio sdhfv ioshdfv ihsdiovh sdiof hfiosdh iosh iodh is*/ </script>";

 

while(1) {

echo "a";

sleep(1);

}

 

?>

[/tr]

 

se você tiver a chance de usar esse codigo ai no IIS você vera como a cada 1 segundo sera digitado um "a" na tela. ja no apache isso n roda de geito nenhum... esse eh o problema... se você quizer ver um uso extenso dessa sintaxe, baxa o meu chat: http://www.wilkerdeveloper.kit.net/wwc.zip

 

o arquivo que contem essa estrutura eh o reload.php

 

se você instala ele no apache, a tela onde deveria ser exibido as mensagem vai ficar eternamente branca... no IIS ele vai rodar, c você quizer ver ele rodando:

 

http://www.uniguararapes.com.br/Wilker/php/webchat

 

obs: você deve tar se perguntando pra q eu coloquei tanto texto de saida inutil ali em cima, os scripts como comentarios, o motivo foi o seguinte, o IIS espera um conteudo minimo ser carregado antes de exibir o conteudo, no kso, akilo ali foi o suficiente pra ele comececar a escrever enquanto carrega

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, depois q eu vi esse tópico, eu andei estudando um pouco sobre ob...

 

a solução q eu achei pra esse caso e que funcionou, foi usar o flush(), junto com o ob_flush() (q jah foi citado acima) ... jah q usando qualquer um dos dois separados não funcionou...

 

 

PHP [/tr][tr]<?php

 

set_time_limit(0);

 

while(1) {

echo "a";

sleep(1);

flush();

ob_flush();

}

 

?>

[/tr]

 

esse código funcionou perfeitamente quando eu testei num servidor unix, com apache e php 4.3.9 ...

 

espero ter ajudado....

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, depois q eu vi esse tópico, eu andei estudando um pouco sobre ob...

 

a solução q eu achei pra esse caso e que funcionou, foi usar o flush(), junto com o ob_flush() (q jah foi citado acima) ... jah q usando qualquer um dos dois separados não funcionou...

 

 

PHP [/tr][tr]<?php

 

set_time_limit(0);

 

while(1) {

echo "a";

sleep(1);

flush();

ob_flush();

}

 

?>

[/tr]

 

esse código funcionou perfeitamente quando eu testei num servidor unix, com apache e php 4.3.9 ...

 

espero ter ajudado....

 

[]´s

kra... testei isso exatamente num servidor unix com o PHP 4.3.9 e n funciono :(

 

ja to ficando desesperado aki... to precisando mto fazer isso funcionar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, depois q eu vi esse tópico, eu andei estudando um pouco sobre ob...

 

a solução q eu achei pra esse caso e que funcionou, foi usar o flush(), junto com o ob_flush() (q jah foi citado acima) ... jah q usando qualquer um dos dois separados não funcionou...

 

 

PHP [/tr][tr]<?php

 

set_time_limit(0);

 

while(1) {

echo "a";

sleep(1);

flush();

ob_flush();

}

 

?>

[/tr]

 

esse código funcionou perfeitamente quando eu testei num servidor unix, com apache e php 4.3.9 ...

 

espero ter ajudado....

 

[]´s

kra... testei isso exatamente num servidor unix com o PHP 4.3.9 e n funciono :(

 

ja to ficando desesperado aki... to precisando mto fazer isso funcionar...

ele dah algum erro ou fica soh carregando a página?

 

jah tentou com ob_start() no começo do código?

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, depois q eu vi esse tópico, eu andei estudando um pouco sobre ob...

 

a solução q eu achei pra esse caso e que funcionou, foi usar o flush(), junto com o ob_flush() (q jah foi citado acima) ... jah q usando qualquer um dos dois separados não funcionou...

 

 

PHP [/tr][tr]<?php

 

set_time_limit(0);

 

while(1) {

echo "a";

sleep(1);

flush();

ob_flush();

}

 

?>

[/tr]

 

esse código funcionou perfeitamente quando eu testei num servidor unix, com apache e php 4.3.9 ...

 

espero ter ajudado....

 

[]´s

kra... testei isso exatamente num servidor unix com o PHP 4.3.9 e n funciono :(

 

ja to ficando desesperado aki... to precisando mto fazer isso funcionar...

ele dah algum erro ou fica soh carregando a página?

 

jah tentou com ob_start() no começo do código?

ele soh n carrega a pagina... e eu ja tentei da ob_start() no inicio do codigo e nada...

 

ta fodinha faze isso viu...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Também testei aqui e funcionou ... com ob_flush()da uma olhada se tu naum ta mandando nada antes do ob_start() ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Também testei aqui e funcionou ... com ob_flush()da uma olhada se tu naum ta mandando nada antes do ob_start() ...

tentei de td isso q vcs disseram... mais n tive resultado positivo :( tentei de todos os geitos, com ob_start(), sem ob_start(), com ob_start no inicio do codigo, no meio... n consegui fazer rodar no apache de geito nenhum... :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Minha Config é:

 

Apache version : Apache/1.3.31 (Win32)

PHP version : 5.0.2

 

Testei aqui exatamente assim:

PHP [/tr][tr]<?php

ob_start();

set_time_limit(0);

 

while(1) {

echo "a";

sleep(1);

flush();

ob_flush();

}

 

?>

[/tr]

 

Funcionou, ele vai escrevendo os "a" na tela, um do ladinho do outro, mas a barra de progresso do IE num termina nunca! heheheheh

 

Mas funcionou sim, e no apache!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem uma coisa.Eu fiz o código aqui no dreamweaver, dei F12 e funcionou normal, foi quando eu vim aqui postei. logo após, fechei o IE e fui no dreamweaver e dei F12 denovo, agora não funcionou, tentei restartar o APACHE, e mesmo assim não funcionou!Agora naum tah funcionando de jeito nenhum! Não sei pq só funcionou na primeira vez! <_< <_< <_<

Compartilhar este post


Link para o post
Compartilhar em outros sites

eh meu velho... o apache eh de lua... as vezes funciona... as vezes n... tem q arrumar um geito q funcione sempre. pq as vezes fica fodinha... o geito eh sair tentando!! hehhehemais eu ainda tenho esperanca q exista algum header pra isso... tem header pra td... deve ter 1 pra isso neh n???

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.