Как очистить ранее отобранные элементы в PHP
В php существует ли способ очистить/удалить все ранее отобранные или напечатанные элементы?
Например:
<?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'
?>
My script использует функцию include. Входящие файлы не должны ничего эха. На всякий случай, если кто-то (ex = hacker) пытается, мне нужен способ удалить.
Ответы
Ответ 1
<?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'
?>
Функции буферизации вывода
Функции буферизации вывода также полезны в хакерах, чтобы принуждать функции, которые печатаются только для возврата строк, т.е.
<?php
ob_start();
var_dump($myVar);
$data = ob_get_clean();
// do whatever with $data
?>
Ответ 2
в то время как @monoxide прав, лучше найти более интуитивные способы сделать то же самое. например:.
<?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;
?>
Приветствия,
JRH
Ответ 3
В идеале вы не должны выводить ничего, что вам в конечном итоге не нужно печатать. Держите свою логику отдельно от своей презентации за меньшее разочарование.
При этом вы можете проконсультироваться с параметрами Output Buffering в PHP.
Ответ 4
Если это результат отладки и информация о статусе программы, вас беспокоит, может быть, trigger_error может быть ближе к тому, что вам нужно, например:
trigger_error ("Attempting to load report #{$report_id}.", E_USER_NOTICE);
Когда ваш script находится в процессе производства, он не обнаруживает никаких ошибок, поскольку, как правило, они отключены или зарегистрированы. Также лучше делать фатальные ошибки таким образом с помощью E_USER_ERROR, а не с помощью die().
ob_start ();
require ($filename);
$html = ob_get_clean ();
Вышеуказанное также будет содержать файл и предоставить его содержимое в виде строки.
Предостережение. Отбрасывание буфера также приведет к сбою любых сообщений об ошибках, что приведет к отладке (потенциально) кошмара.
Ответ 5
Если хакер, допустим, имеет доступ к вашему файлу PHP, он также сможет удалить оператор, освобождающий выходной буфер.
Если вы делаете это, потому что вы позволяете пользователям загружать PHP-скрипты, позвольте мне сказать вам, что это очень плохая идея.
В обоих случаях выполнение того, что вы запрашиваете, добавляет 0 безопасности.