Como limpar itens anteriormente ecoou em PHP
Pergunta
No PHP, há alguma maneira de limpar / remover todos os itens anteriormente ecoaram ou impressas?
Por exemplo:
<?php
echo 'a';
print 'b';
// some statement that removes all printed/echoed items
echo 'c';
// the final output should be equal to 'c', not 'abc'
?>
Meu script utiliza a função de incluir. Os ficheiros incluídos não devem echo nada. Apenas no caso de tentativas alguém (ex = hackers), eu preciso de uma maneira de remover.
Solução
<?php
ob_start();
echo 'a';
print 'b';
// some statement that removes all printed/echoed items
ob_end_clean();
echo 'c';
// the final output is equal to 'c', not 'abc'
?>
As funções de buffer de saída também são úteis em hackery às funções coagir que só imprimir para retornar cordas, ie.
<?php
ob_start();
var_dump($myVar);
$data = ob_get_clean();
// do whatever with $data
?>
Outras dicas
enquanto @monoxide é certo, o seu melhor para encontrar formas mais intuitivas de fazer o mesmo. por exemplo:.
<?php
$val_to_print = $a;
if( $need_to_change==true )
$val_to_print = $b;
// when you are sure you won't have to change again...
echo $val_to_print;
?>
Cheers,
JRH
Idealmente, você deve qualquer coisa não saída que você não quer finalmente impresso. Mantenha sua lógica separar de sua apresentação para menos frustração.
Dito isto, pode consultar o saída Buffer opções dentro do PHP.
Se for saída de depuração e informações de status de programa que você está preocupado com talvez trigger_error pode estar mais perto do que você precisa, tais como:
trigger_error ("Attempting to load report #{$report_id}.", E_USER_NOTICE);
Quando o script está em produção que costuma aparecer quaisquer erros como geralmente eles estão desativados ou logado. Também é melhor para fazer erros fatais desta forma com E_USER_ERROR ao invés de usar die ().
ob_start ();
require ($filename);
$html = ob_get_clean ();
O código acima irá também incluir um arquivo e dar-lhe o seu conteúdo como uma string.
Advertência:. Ditching o buffer também vai abandonar quaisquer mensagens de erro jogado para cima, fazendo a depuração (potencialmente) um pesadelo
Se por exemplo um let hacker tem acesso a seu arquivo PHP, ele vai também ser capaz de remover a instrução limpar o buffer de saída.
Se você está fazendo isso porque você está deixando seus usuários fazer upload de scripts PHP, deixe-me dizer-lhe que esta é uma idéia extremamente ruim.
Em ambos os casos, fazendo o que você está pedindo acrescenta 0 segurança.