[英]how would i clear previously echoed result without affecting any other functions in php?
[英]How to clear previously echoed items in 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'
?>
我的腳本使用了include函數。 所包含的文件不應回顯任何內容。 萬一有人(例如=黑客)嘗試,我需要一種刪除方法。
<?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
?>
盡管@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;
?>
干杯,
r
理想情況下,您不應輸出您最終不想打印的任何內容。 將您的邏輯與演示文稿分開,以減少挫敗感。
話雖如此,您可以在PHP中查詢Output Buffering選項。
如果它是調試輸出和程序狀態信息,則您可能會擔心trigger_error可能更接近您的需求,例如:
trigger_error ("Attempting to load report #{$report_id}.", E_USER_NOTICE);
當您的腳本投入生產時,它不會顯示任何錯誤,因為通常會禁用或記錄這些錯誤。 最好也用E_USER_ERROR而不是die()來執行致命錯誤。
ob_start ();
require ($filename);
$html = ob_get_clean ();
上面還將包括一個文件,並以字符串形式提供其內容。
注意事項:丟棄緩沖區還會丟棄拋出的任何錯誤消息,從而(可能)使調試成為一場噩夢。
如果黑客說可以訪問您的PHP文件,那么他也將能夠刪除清除輸出緩沖區的語句。
如果您這樣做是因為讓用戶上傳PHP腳本,那么讓我告訴您,這是一個非常糟糕的主意。
在這兩種情況下,執行您要的操作都會增加0安全性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.