Vamos dar uma iniciação prática ao uso de funções de controle de buffer.
Buffer seria a saída do PHP. Todo "echo" é enviado para lá. No final da execução do script, o buffer é enviado ao navegador.
Mas você consegue limpá-lo e fazer alterações nele mesmo sem mexer nos "echos".
Vamos, por exemplo, censurar a palavra "smoo" de duas strings. Poderíamos fazer:
Desta forma, trabalhamos antes do "echo". Agora, imagine-se tendo um blog onde tem muita gente escrevendo "smoo". Você não vai sair na base de dados, ou nos arquivos mais profundos do sistema, para adicionar um str_replace. Veja como faríamos:
Demos um str_replace simples, mas... E se o usuário digitar:
smsmooo
Repare que há duas palavras "smoo", uma dentro da outra, que está partida. Neste caso, como temos apenas um str_replace simples, o primeiro "smoo" (de dentro) vai ser removido, deixando o outro à mostra. Em outras palavras, a proteção falhou...
smsmooo
Filtros como esse são utilizados por programadores, para remover palavras usadas em consultas SQL (select, union...), e eles acreditam que, com isso, estarão invulneráveis.
Mas há como melhorar esse filtro, substituindo nosso str_replace() simples por esta pequena recursão:
Quer outro exemplo, bem útil? Remover espaços excessivos, tabulações e quebras de linha, para reduzir o consumo de banda e tempo de carregamento da página.
Este é apenas um tutorial de iniciação, como dissemos no início. Agora que você já sabe para que serve funções como essas, pode ler a Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar....
Até mais!
Buffer seria a saída do PHP. Todo "echo" é enviado para lá. No final da execução do script, o buffer é enviado ao navegador.
Mas você consegue limpá-lo e fazer alterações nele mesmo sem mexer nos "echos".
Vamos, por exemplo, censurar a palavra "smoo" de duas strings. Poderíamos fazer:
Código PHP:
$str1 = "Lorem smoo ipsum";
$str2 = "Dolor smoo sit amet";
$str1 = str_replace("smoo", "{censurado}", $str1);
$str2 = str_replace("smoo", "{censurado}", $str2);
echo $str1;
echo $str2;
Código PHP:
$str1 = "Lorem smoo ipsum";
$str2 = "Dolor smoo sit amet";
echo $str1;
echo $str2;
// ja demos o echo. o "smoo" foi enviado ao buffer...
// entao vamos obter todo o buffer e jogar para uma variavel, e limpar (excluir tudo que tem nele)
$buffer = ob_get_clean();
// reabra a saida
ob_start();
// importante: refaça os headers!
header("Content-type: text/html; charset=UTF-8");
// agora vamos tratar o buffer, removendo as palavras "smoo"
str_replace("smoo", "{censurado}", $buffer);
echo $buffer;
smsmooo
Repare que há duas palavras "smoo", uma dentro da outra, que está partida. Neste caso, como temos apenas um str_replace simples, o primeiro "smoo" (de dentro) vai ser removido, deixando o outro à mostra. Em outras palavras, a proteção falhou...
smsmooo
Filtros como esse são utilizados por programadores, para remover palavras usadas em consultas SQL (select, union...), e eles acreditam que, com isso, estarão invulneráveis.
Mas há como melhorar esse filtro, substituindo nosso str_replace() simples por esta pequena recursão:
Código PHP:
while(strpos($buffer, "smoo")) { // enquanto houver, no buffer, o texto "smoo"
$buffer = str_replace("smoo", "{censurado}", $buffer);
}
Código PHP:
$buffer = ob_get_clean(); // obtemos o buffer
$remover = array(
"\t",
"\n",
"\r\n",
" "
);
$buffer = str_replace($remover, null, $buffer); // removemos tudo de uma vez
ob_start();
header("Content-type: text/html; charset=UTF-8");
echo $buffer; // mostramos o buffer
Até mais!