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
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><br>Tinha que provar mais coisas. Espero que se leia com interesse.</body>
</html>