duanjuduo4573 2017-03-11 20:37
浏览 34
已采纳

PHP - 返回HTML表单[重复]

This question already has an answer here:

Going to call mail within PHP server code then return back to HTML page. Wrote the following server code:

<!DOCTYPE HTML>
<HEAD>
    <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
</HEAD>
<BODY>
    <?php
    $referer = filter_input(INPUT_SERVER, 'HTTP_REFERER');  // real referrer detected
    // do something or nothing
    header("Location: $referer");
    ?>
</BODY>

This code produce an error "Warning: Cannot modify header information - headers already sent by...". Why?

</div>
  • 写回答

2条回答 默认 最新

  • dravpuso44681 2017-03-11 21:32
    关注

    header() in normal usage ,must be called before any actual output is sent,
                     and you already send data before using it .

    ☼►Solution  :   to manipulate that and have the ability to use header() wherever you want ..
    then PHP has Output control functions which allow you to control when the output (such as HTML code) is being buffered in the server until you send it . so follow the Instructions down below :

    by using ob_start in the beginning and ob_endin the end

    ✔ replace your code with this :

    <?php
    ob_start( );
    ?>
    <!DOCTYPE HTML>
    <HEAD>
    <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
    </HEAD>
    <BODY>
    <?php
    $referer = filter_input(INPUT_SERVER, 'HTTP_REFERER');  // real referrer detected
    // do something or nothing
    header("Location: $referer");
    ?>
    </BODY>
    
    <?php
    ob_end_flush( );
    ?>
    

    Warning : make sure there is no Whitespace before <?php ob_start( );
    or it will throw the same error .
    .........................................

    ✘ - the wrong way :

      <?php
    ob_start( ); ?>
    

    ✔ - the Right way :

    <?php
    ob_start( ); ?>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?