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.

Foi útil?

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'

?>

saída funções tamponamento

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top