Imprimir resultados em tempo real.

1. Imprimir resultados em tempo real.

Leandro Medeiros
doctorx777

(usa Ubuntu)

Enviado em 28/08/2012 - 16:57h

Olá Pessoal,
Bom sou iniciante no php e estou começando fazer alguns cógidos para ir treinando devagar.
tenho aqui um código simples, porém não está comportando da maneira como gostaria.

O código simplesmente imprime um nome, dá um sleep de 1 segundo e imprime o próximo nome, assim até terminar.
Meu problema é que, eu gostaria de ver os nomes sendo impressos em tempo real, do jeito que tá, o cógido processa tudo pra só no final mostrar o resultado. gostaria que os nomes fossem sendo impressos em tempo real, como se fosse um programinha em C ou shell script.
mas não faço a menor idéia de como fazer isso.

segue o código:




  


2. continuando...

Leandro Medeiros
doctorx777

(usa Ubuntu)

Enviado em 28/08/2012 - 17:07h

index.php

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Testando php...</title>
<!-- ==teste de css== -->
<style type="text/css" media="screen">
body {
width: 800px;
margin: 0 auto;
}
h1 {
text-align: center;
font-size: 26px;
font-family: Arial;
}
textarea {
width: 50%;
height: 500px;
text-align: center;
float: left;

background-color: #ffffff;
border: 1px solid #cccccc;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
-moz-transition: border linear 0.2s, box-shadow linear 0.2s;
-ms-transition: border linear 0.2s, box-shadow linear 0.2s;
-o-transition: border linear 0.2s, box-shadow linear 0.2s;
transition: border linear 0.2s, box-shadow linear 0.2s;
}
input[type=text] {
background-color: #ffffff;
width: 40%;
height: 20px;
margin-left: 15px;
margin-bottom: 10px;
border: 1px solid #cccccc;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
-moz-transition: border linear 0.2s, box-shadow linear 0.2s;
-ms-transition: border linear 0.2s, box-shadow linear 0.2s;
-o-transition: border linear 0.2s, box-shadow linear 0.2s;
transition: border linear 0.2s, box-shadow linear 0.2s;
}
textarea:focus, input[type=text]:focus {
border-color: rgba(82, 168, 236, 0.8);
outline: 0;
outline: thin dotted \9;
/* IE6-9 */

-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
}
input[type=submit] {
margin-left: 125px;
}
div {
float: right;
width: 40%;
margin-top: 20px;
margin-right: 50px;
font-family: Arial;
}
</style>

</head>
<body>
<h1>Imprime nomes (php iniciante)</h1>

<form method="post" action="final.php">

<textarea name="data" required id="data">ze
antonio
maria
joao
pedro
joaquim
bruno</textarea>
<input type="submit" value="Iniciar">

<div>Teste de impressão de nomes e resultados em tempo real.</div>
</form>
</body>
</html>



3. continuando...

Leandro Medeiros
doctorx777

(usa Ubuntu)

Enviado em 28/08/2012 - 17:08h

final.php

<?php

error_reporting(-1);
set_time_limit(0);
ignore_user_abort(true);


if(trim($_POST['data']) == "") {
echo "Sem dados.";
exit();
}


$data = trim($_POST['data']);

$info = explode("\n", $data);
foreach ($info as $key => $value) {
echo "Nome: $value <br>";
sleep(1);
}


Como podem ver, o código é todo processado pra só no final ser mostrado. eu gostaria de acompanhar
a impressão dos nomes em tempo real na página. apenas isso.

Bom, pode ser algo fácil, mas pra quem tá começando ainda é um mistério, por isso conto com a ajuda da galera.
Desde já agradeço!


4. Re: Imprimir resultados em tempo real.

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 28/08/2012 - 21:09h

Esse é um comportamento de ambientes cliente -> servidor da web, o cliente (navegador) vai receber o conteúdo processado no servidor (o php) então vc vai vai ver o resultado quando o mesmo tiver sido todo processado mesmo.


Se queres algo mais "em tempo real" use javascript, que fica do lado do cliente.


5. Re: Imprimir resultados em tempo real.

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 28/08/2012 - 21:36h

Como disse o colega, PHP é uma linguagem dinâmica, mas pra ver os resultados alterados tem que atualizar as páginas, pois o código fica no servidor. Você pode utilizar javascript para atualizar automaticamente os resultados.


6. Re: Imprimir resultados em tempo real.

Juliano Giacomeli
julianjedi

(usa Arch Linux)

Enviado em 06/09/2012 - 17:49h

Como nossos amigos já falaram o php é uma linguagem server side, então o conteúdo soh eh processado através de uma requisição, seja uma atualização da página ou de parte dela, isso pode ser feito com ajax, o problema é que fazer ajax com javascript puro é um tanto trabalhoso e pouco prático, recomendo a vc dar uma olhadinha em Jquery que torna o processo muito mais rápido.. segue o link do Jquery.ajax http://api.jquery.com/jQuery.ajax/ com ele vc pode inclusive utilizar callbacks, e passar parametros, agora uma opção mais facil seria fazer um .load a cada segundo, mas se a pagina fosse alterada com mais de 1 nome por vez os mesmos apareceriam a cada atualização. Uma ideia pra resolver isso seria usar o .ajax no lado do cliente, e fazer o PHP gerar um JSON que poderia ser tratado e comparado a cada atualização e assim exibir um nome por vez ..


7. Re: Imprimir resultados em tempo real.

rebert
reberttomaz

(usa Outra)

Enviado em 15/04/2014 - 11:38h

existe uma maneira sim, teoricamente você usa a memoria do navegador e a partir daí ele começaa mostrar as echos e prints de seu codigo.

basta fazer isso aqui sempre antes dos prints

echo str_repeat(" ", 1024), "\n";
ob_flush();
flush();


exemplo

echo str_repeat(" ", 1024), "\n";
ob_flush();
flush();
print " <--- iniciando processamento --->


você pode até criar uma função só pra encher a memória
assim

function carrega_memoria(){
echo str_repeat(" ", 1024), "\n";
ob_flush();
flush();
}

aí antes dos printss você chama a função
assim:
carrega_memoria();
print'blablabla';

rebert tomaz
reberttomaz@gmail.com






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts