无法修改标头信息 - 标头已由...发送 WordPress 问题 [重复]

Posted

技术标签:

【中文标题】无法修改标头信息 - 标头已由...发送 WordPress 问题 [重复]【英文标题】:Cannot modify header information - headers already sent by... WordPress Issue [duplicate] 【发布时间】:2011-11-14 22:47:59 【问题描述】:

我遇到了这个错误。我不知道如何处理。

无法修改标头信息 - 标头已由(输出 开始于 /home/ben213/public_html/wp-content/themes/Bendaggers/functions.php:9) 在 /home/ben213/public_html/wp-includes/pluggable.php 第 934 行

我的 Functions.php 文件第 9 行是:

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

而我的 pluggable.php #934 是

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;

我很难弄清楚这一点,因为我不是程序员。似乎有什么问题? 请帮助我...

【问题讨论】:

嗨,保罗,美好的一天!对不起,你能把它翻译成英文吗?那我该怎么做呢? 什么是pluggable.php?你为什么拥有它?看起来它应该包含在 functions.php 之前,因为它尝试设置 HTTP 标头,并且需要在您开始输出 HTML 之前设置这些标头。 这里不知道 Paul,我只知道 用于小部件化我的侧边栏。不知道,对不起。 【参考方案1】:

您的主题是将输出(文本)打印到浏览器,但由于某种原因,WordPress 在整个页面呈现之前将用户(使用 wp_redirect)重定向到该页面之外。您不能开始打印输出然后重定向,否则您将收到您看到的错误。这就是 Paul Grime 在他的评论中所要表达的。

Ken White 评论了一篇有类似问题的帖子。根据我自己的经验,我通过缓冲脚本的输出解决了这个问题。

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

//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 在必要时重定向用户,作为其自身逻辑的一部分。

【讨论】:

谢谢。这解决了我的问题! @BenDaggers 请将此答案标记为正确或评论为什么不正确。谢谢。 谢谢。像魅力一样工作! 这个有副作用吗? 是的,这有副作用,内存使用是最明显的,站点响应较慢,因为在发送任何内容之前必须呈现整个页面。【参考方案2】:

如果您尝试从当前页面重定向到另一个页面,您在该页面设置了条件或不设置条件,请使用此代码。 例如,您有两个页面 A.php 和 B.php,并且当前您在 A.php 中,您想在单击 BUTTON 时转到其他页面 B.php。

   if(isset($_POST['save_btn']))
    
        //write some of your code here, if necessary
        echo'<script> window.location="B.php"; </script> ';
     

【讨论】:

以上是关于无法修改标头信息 - 标头已由...发送 WordPress 问题 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 PHP 中的“标头已发送”错误

如何修复 PHP 中的“标头已发送”错误

如何修复 PHP 中的“标头已发送”错误

无法修改标头信息 - 标头已在 Laravel AngularJS 中发送

在 WordPress (wp-load.php) 之外使用 WordPress:“无法修改标头信息 - 标头已发送”

无法修改标头输出已启动警告