Controle de saída em PHP II

Vejamos outras funcionalidades interessantes do controle da saída em PHP, para trabalhar com um buffer de saída. Eliminamos o buffer e executamos funções antes de mostrá-lo.

Por Miguel Angel Alvarez - Tradução de JML


Publicado em: 23/7/08

Valorize este artigo:
Continuamos explorando algumas utilidades interessantes de PHP para realizar controle de saída, através de um buffer, para não enviar ao cliente o código HTML gerado por PHP até que o programador o deseje.

Este artigo continua com o outro anterior publicado em CriarWeb.com: Controle de saída em PHP.

Agora vamos aprender a eliminar ou cancelar uma saída armazenada em um buffer e a executar funções para realizar um processamento do código armazenado em um buffer antes de enviá-lo ao cliente. Para isso, vamos conhecer novas funções:

A função ob_clean() limpa o buffer de saída. Isso quer dizer que o que tivermos no buffer de saída se perderá.

A função ob_end_clean() serve para limpar o buffer de saída e ademais desabilitá-lo. Ou seja, termina de trabalhar com o buffer e ainda descarta todas as mudanças que tiverem sido incluídas no buffer.

Também utilizaremos um parâmetro que não tínhamos visto da função ob_start(parâmetro). Esse parâmetro serve para indicar o nome de uma função que será chamada antes de enviar o buffer de saída ao cliente.

Vejamos este código, que faz uso das novas funções e vamos explicando a seguir passo a passo.

<html>
<head>
   <title>Página processada com buffer de saída</title>
</head>
<body>
<?
//inicio o buffer de saída
ob_start();

echo "Oi!!! Isto vai ao buffer!";

//limpo o buffer de saída
ob_clean();

echo "Outra vez escrevo!!";

//limpo o buffer de saída e o desabilito
ob_end_clean();

echo "Isto sim que vai aparecer na página<br>";

function converte_caracteres_especiais($buffer){
   return htmlentities ($buffer);
}

//inicio o buffer de saída
ob_start("converte_caracteres_especiais");

echo "Tinha que provar mais coisas. Espero que se leia com interesse.";

ob_end_flush();
?>
</body>
</html>


Com ob_start(); iniciamos o buffering da saída. A partir de agora tudo o que se escrever na página se salvará no burffer. Portanto, o seguinte echo "Oi!!! Isto vai ao buffer!"; se salvará no buffer.

Com a linha ob_clean(); se apaga o conteúdo do buffer, por isso a saída armazenada se perde. Ou seja, o echo anterior não se mostrará na página.

O buffer, apesar de estar recém limpo, continua ativo. Por isso com o echo "Outra vez escrevo!!";, o texto continuará inserindo-se no buffer.

Logo, com a linha ob_end_clean(); se apaga o conteúdo do buffer e se desabilita. Perdemos outra vê tudo que tiver sido escrito na página a partir do início de uso do buffer, portanto o anterior echo não se mostrará.

Na seguinte linha fazemos um echo "Isto sim que vai aparecer na página<br>"; Como tínhamos desabilitado anteriormente o buffer com ob_end_clean(), esse texto se irá direto à saída e chegará ao navegador que solicitou a página.

Logo no código vemos uma declaração de uma função:

function converte_caracteres_especiais($buffer){
   return htmlentities ($buffer);
}

Utilizaremos esta função para executá-la antes de enviar o buffer ao cliente. Recebe um parâmetro que é o buffer que se está processando. Dentro da função se podem realizar ações e se deve devolver um valor, que será o que definitivamente se envie ao navegador do visitante.

Para dizer ao PHP que se deve executar essa função antes de enviar o buffer ao cliente se deve iniciar o uso do buffer ob_start(parâmetro), com o parâmetro que é o nome da função, tal como comentamos antes.

ob_start("converte_caracteres_especiais");

O seguinte echo "Tinha que provar mais coisas. Espero que se leia com interesse."; se coloca no buffer. E finalmente com ob_end_flush(); se envia o buffer ao cliente.

Como ao iniciar o buffer havia sido indicado um parâmetro com o nome da função converte_caracteres_especiais() se executará essa função antes de enviar o conteúdo ao cliente web.

Nesse função simplesmente se processa o buffer, convertendo os caracteres especiais que tiver em seus correspondentes códigos especiais de HTML, com htmlentities().

Portanto, o texto que se enviará ao cliente é o texto que tiver no buffer depois de executar htmlentities().

Conclusão e resultado do controle de saída de PHP

Para acabar, podemos ver o código que se geraria e se enviaria ao cliente como resultado do processamento dessa página.

<html>
<head>
   <title>Página processada com buffer de saída</title>
</head>
<body>
Isto sim que vai aparecer na página<br>&lt;br&gt;Tinha que provar mais coisas. Espero que se leia com interesse.</body>
</html>






Usuários :    login / registro
Manuais relacionados
Categorias relacionadas
O autor

Buscar projetos:

Home | Sobre nós | Copyright | Anuncie | Entrar em contato