关于php:无法修改header 信息 – 已经发送的header … WordPress问题

Cannot modify header information - headers already sent by… WordPress Issue

本问题已经有最佳答案,请猛点这里访问。

我遇到了这个错误。我不知道该怎么办。

Cannot modify header information - headers already sent by (output
started at
/home/ben213/public_html/wp-content/themes/Bendaggers/functions.php:9)
in /home/ben213/public_html/wp-includes/pluggable.php on line 934

my functions.php文件行9是:

1
<?php if(function_exists('register_sidebar'))register_sidebar();?>

而我的pluggable.php 934是

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function wp_redirect($location, $status = 302) {
    global $is_IIS;

    $location = apply_filters('wp_redirect', $location, $status);
    $status = apply_filters('wp_redirect_status', $status, $location);

    if ( !$location ) // allows the wp_redirect filter to cancel a redirect
        return false;

    $location = wp_sanitize_redirect($location);

    if ( !$is_IIS && php_sapi_name() != 'cgi-fcgi' )
        status_header($status); // This causes problems on IIS and some FastCGI setups

    header("Location: $location", true, $status);}
endif;

因为我不是程序员,所以我很难弄清楚。怎么了?请帮帮我…


您的主题是将输出(文本)打印到浏览器,但出于某种原因,WordPress会在呈现整个页面之前将用户重定向(使用wp_重定向)离开该页面。您不能开始打印输出然后重新定向,否则您会看到错误。这就是保罗·格里姆在评论中所说的。

KenWhite在评论时提到了一篇有类似问题的文章。在我自己的经验中,我通过缓冲脚本的输出来解决这个问题。

在主题的functions.php文件(每次加载主题的页面时都包含该文件)中,放置以下内容:

1
2
3
4
5
//allow redirection, even if my theme starts to send output to the browser
add_action('init', 'do_output_buffer');
function do_output_buffer() {
        ob_start();
}

现在,即使主题的一部分开始向浏览器发送输入,PHP也不会在页面完全加载之前发送该文本,这允许WordPress在必要时将用户重定向为自己逻辑的一部分。


如果您正试图从当前页面重定向到另一个页面,在该页面中,您强制了一个条件或没有条件,那么请使用此代码。例如,您有两个页面a.php、&b.php和currenty,您在a.php中单击按钮时要转到其他页面b.php。

1
2
3
4
5
   if(isset($_POST['save_btn']))
    {
        //write some of your code here, if necessary
        echo' window.location="B.php";  ';
     }