簡體   English   中英

如何清除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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM