PHP - 返回HTML表单

时间:2017-03-11 20:37:04

标签: php html

在PHP服务器代码中调用邮件然后返回HTML页面。 写了以下服务器代码:

<!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>

此代码产生错误“警告:无法修改标头信息 - 标头已由...发送”。 为什么呢?

2 个答案:

答案 0 :(得分:1)

您的PHP代码位于HTML的中间,被视为输出。生成输出后,header()等函数将不再起作用,并将返回错误。解决方案是在任何html之前将php代码移动到文件的顶部。

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

答案 1 :(得分:1)

正常使用中的

header()必须在发送任何实际输出之前调用,
您已经在使用之前发送了数据。

  

☼►解决方案:来操纵它并且能够在任何你想要的地方使用header()..
然后PHP有输出控制功能,它允许你控制输出的时间(在发送它之前,服务器中正在缓冲(例如HTML代码)。请按照下面的说明进行操作:

在开头使用ob_start,在最后使用ob_end

✔用以下代码替换你的代码:

<?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( );
?>
  

警告:确保<?php ob_start( );之前没有空格,否则会抛出相同的错误。   
.........................................
<登记/>   ✘ - 错误 方式:

  <?php
ob_start( ); ?>
     

✔ - 正确 方式:

<?php
ob_start( ); ?>