PHP:清除屏幕(或将屏幕设置为空白)

PHP:清除屏幕(或将屏幕设置为空白),php,Php,=================== 注意:这不是重复的,因为我已经在上尝试了解决方案,但对我的问题无效 =================== 如何删除以前[浏览器的]回显项-清除屏幕完全设置屏幕空白 例如…: <?php function test($var) { if ($var === 0) { echo "Hello "; } if ($var === 1) { echo "World"; } if ($var < 0 || $var > 1

===================

注意:这不是重复的,因为我已经在上尝试了解决方案,但对我的问题无效 ===================

如何删除以前[浏览器的]回显项-清除屏幕完全设置屏幕空白

例如…:

<?php
function test($var) {
    if ($var === 0) { echo "Hello "; }
    if ($var === 1) { echo "World"; }
    if ($var < 0 || $var > 1) { [clear screen]; echo "Number is too big";}
}

test(0);
test(1);
test(666);
在HTML方面,我使用的是…content=/>。当页面没有关键字时,这是不清除浏览器的输出:

HTML

因此,屏幕为空白,没有任何错误消息

说:

输出缓冲区是可堆叠的,也就是说,当另一个ob_启动处于活动状态时,您可以调用ob_启动。只需确保您调用ob_end_flush的次数适当。如果多个输出回调函数处于活动状态,则输出将按嵌套顺序依次通过每个输出回调函数进行过滤

说:

输出缓冲区必须由ob_start with PHP_output_HANDLER_CLEANABLE标志启动。否则ob_clean将无法工作

PHP文档

控制是否可以清除由ob_start创建的输出缓冲区

从PHP5.4开始提供

您确定可以启动/刷新/结束输出缓冲区吗? 你检查过你的服务器配置了吗?
您确定没有发生输出缓冲区堆叠吗?

是否有无法执行以下操作的原因?在知道要打印/回显的内容之前,不应该进行输出

<?php
$output = "";
function test($var) {
if ($var === 0) { $output = "Hello "; }
if ($var === 1) { $output = "World"; }
if ($var < 0 || $var > 1) { [clear screen]; $output="Number is       too big";}
}
Function outputCheck(){
  Echo $output;
}

test(0);
test(1);
test(666);

outputCheck();

我不理解您的需要,事实上,您不想清除屏幕,而是想在浏览器中看到错误消息,而不看源代码。这是不可能的,因为你已经打开了标签

请尝试以下操作,而不是退出代码:

   exit('<html><head></head><body>Page ' . $pageID . " has no keywords</body></html>");

您必须关闭meta标记和header,然后启动body标记。

我尝试了您在说明中提供的示例代码,下面的代码对我有效

<?php
    ob_start();
    function test($var) {
        if ($var === 0) { echo "Hello "; }
        if ($var === 1) { echo "World"; }
        if ($var < 0 || $var > 1) { 
            ob_end_clean(); 
            echo "Number is too big";
        }
    }

    test(0);
    test(1);
    test(666);
更多详情

让我知道它是否对您有效。

您无法恢复输出。通常,服务器一次发送每个输出。因此,打印或回音无法反转。但您可以通过使用ob_start启动所有代码来缓冲输出

在代码末尾,您可以使用ob_end_flush将缓冲区发送到客户端

要输出错误详细信息,您可以使用如下自定义函数:

function error($str) {
    ob_end_clean();
    exit($str);
}
这会帮你的忙的

但是

在发送html之前,将所有信息收集到你的元数据中会更好。这将导致更快地发送到客户端。如果所有信息都已清除,则只需输出图元:

$test1 = test(1);
$test2 = test(2);
if //all my content is okay {
    ...paste html here...
}

你可以从学校得到一些帮助 按键功能:ob_开始、ob_清洁、ob_结束\u冲洗 请尝试下面的代码

<?php
ob_start();
function test($var) {
    if ($var === 0) { echo "Hello "; }
    if ($var === 1) { echo "World"; }
    if ($var < 0 || $var > 1) { 
        ob_clean(); 
        echo "Number is too big";
    }
}

test(0);
test(1);
test(666);
ob_end_flush();

您使用exit的方式非常糟糕:

Exit将完成脚本的执行,我想这不是您期望的行为。因此,当文档没有关键字时,您的代码无法正常工作:

class keywords{

    private static function run(){
    ...pdo code...
    ...some more code...
    if( $sht->rowCount() === 0 ){
        ...[clear screen goes here]...
        exit("Page " . $pageID . " has no keywords");
    else...
    ...more code
    }

    ...more code    
}
您必须使用return或其他方法退出运行,但不要结束PHP脚本执行

例如,将此文本保留在关键字标记中:

class keywords{

    private static function run(){
    ...pdo code...
    ...some more code...
    if( $sht->rowCount() === 0 ){
        ...[clear screen goes here]...
        echo "Page " . $pageID . " has no keywords";
        return;
    else...
    ...more code
    }

    ...more code    
}
不留下任何文本的示例:

class keywords{

    private static function run(){
    ...pdo code...
    ...some more code...
    if( $sht->rowCount() === 0 ){
        ...[clear screen goes here]...
        return "Page " . $pageID . " has no keywords";
    else...
    ...more code
    }

    ...more code    
}
该文本可用于警告调用方该问题,但在您的代码中,它将默默地将关键字标记保留为空,并仍让PHP脚本的其余部分运行

致以最良好的祝愿

<?php
ob_start(); //starts the buffer
function test($var) {
    if ($var === 0) { echo "Hello "; }
    if ($var === 1) { echo "World"; }
    if ($var < 0 || $var > 1)
    {
         ob_get_clean(); //fetches buffer (not used here) and cleans it. It do not stop the buffer from working like  ob_end_clean();
         echo "Number is too big";
    }
}

test(0);
test(1);
test(666);

这通常用于加载自定义插件的cms中。人们倾向于在文件或空格的末尾添加前导回车,然后在第一个空格之前添加回车。。。您应该使用以下选项:

exit(' " /> </head><body> Page '.$pageID.' has no keywords </body></html>');

好的,我会尝试用多种方式面对这个问题。我们可以理解,您的第一个测试脚本:

<?php
function test($var) {
    if ($var === 0) {
        echo "Hello ";
    }
    if ($var === 1) {
        echo "World";
    }
    if ($var < 0 || $var > 1) {
        echo "Number is too big";
    }
}

test(0);
test(1);
test(666);

这家店开了很长时间,也许对你有帮助。让我知道这是否对你有帮助

终端还是浏览器?@Rizier123浏览器的,但如果你两者都知道……删除旧的回音字符串,那么你就只会是你想要的,你不需要C/C++了。我在你的编辑中看到的所有可能的副本是ob_end_clean不起作用,但你没有解释任何过去的事情。正如您所描述的,问题在于您正在回显项目,并且如果代码满足特定条件,则希望清除这些项目。如果您使用链接问题中描述的ob_start,它应该完全满足您的要求。这个问题的其他答案也带来了更大的问题,那就是,你不应该重复一些不应该出现的东西。最好保存内容,并等待条件满足后再回显。您是否将其称为ob\u startPHP\u OUTPUT\u HANDLER\u CLEANABLE;。。。更多代码…ob_clean;?这两个都是正确的,另外,请确保您没有嵌套ob_开始调用。我已经在5天前编写了相同的解决方案,请参见下面或上面的评论。。。在发布之前尝试阅读其他人的答案。。。但你是对的,这是解决这种。。。问题…啊,对不起,亚当,我没看到。我刚刚给了你一个+1,至少我很高兴看到有人读了这个问题-
exit(' " /> </head><body> Page '.$pageID.' has no keywords </body></html>');
<?php
function test($var) {
    if ($var === 0) {
        echo "Hello ";
    }
    if ($var === 1) {
        echo "World";
    }
    if ($var < 0 || $var > 1) {
        echo "Number is too big";
    }
}

test(0);
test(1);
test(666);
function test($var)
{
    if ($var === 0) {
        echo "Hello ";
    }
    if ($var === 1) {
        echo "World";
    }
    if ($var < 0 || $var > 1) {
        ob_clean();//clear all output till now
        echo "Number is too big";
    }
}
ob_start();//start buffering output
test(0);
test(1);
test(666);
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="description"    content="Some page" />  
    <meta name="keywords"       content="<?php keywords::run(); ?>" />
</head>
<body>
maybe some content?...
</body>
</html>
class YourErrorCatcher
{

    private static $errors = array();//array for collecting all your errors

    public static function addError($errorString)//method to add new error
    {
        self::$errors[] = $errorString;
    }

    public static function echoErrors()//function echoing all your errors in selected place
    {
        $errorMessage = implode("<br>", self::$errors);
        echo $errorMessage;
        return true;
    }

}
<body>
maybe some content?...
and here we have our errors:
<?php YourErrorCatcher::echoErrors(); ?>
</body>
class keywords{

    private static function run(){
    //i assume that this function is echoing some keywords, so let's start buffering output
    ob_start();
    ...pdo code...
    ...some more code...
    if( $sht->rowCount() === 0 ){
    ob_clean();//there's error - clear buffer!
    //"throw" error
    YourErrorCatcher::addError("Page " . $pageID . " has no keywords");
    YourErrorCatcher::addError('Yes, you can "throw" more than one error in this solution and all of them will be shown.');
    //instead of exit we're returning false
    return false;
    else...
    ...more code
    }

    ...more code    
}