无法修改标头信息 - 标头已由...发送 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 问题 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
无法修改标头信息 - 标头已在 Laravel AngularJS 中发送