我收到一个 php 警告:无法修改头信息(但我在 html 代码之前有我的包含文件!) [英] I'm getting a php warning: cannot modify header information (but I have my include file before the html code!)

查看:25
本文介绍了我收到一个 php 警告:无法修改头信息(但我在 html 代码之前有我的包含文件!)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我明白了:

<块引用>

警告:无法修改标头信息 - 标头已由

(输出开始于/www/zxq.net/a/l/e/alexchen/htdocs/index.php:12)在/www/zxq.net/a/l/e/alexchen/htdocs/common.php第 13 行

就在我的 h2 标签上.

我在 html 代码之前有我的 common.php.我不知道是什么问题.帮助!

index.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><头><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/><title>新项目</title><link rel="stylesheet" type="text/css" href="styles/global.css"/><link rel="stylesheet" type="text/css" href="styles/slimbox2.css"/><script type="text/javascript" src="scripts/jquery-1.3.2.min.js"></script><script type="text/javascript" src="scripts/jquery.validate.js"></script><script type="text/javascript" src="scripts/slimbox2.js"></script><script type="text/javascript" src="scripts/jquery.scrollTo-min.js"></script><script type="text/javascript" src="scripts/jquery.localscroll-min.js"></script><script type="text/javascript" src="scripts/custom.js"></script><?php if(get_lang()=='en') {echo '<script type="text/javascript" src="scripts/jquery-validate/val-en.js"></script>';} ?><?php if(get_lang()=='es') {echo '<script type="text/javascript" src="scripts/jquery-validate/val-es.js"></script>';} ?><?php if(get_lang()=='tw') {echo '<script type="text/javascript" src="scripts/jquery-validate/val-tw.js"></script>';} ?><?php if(get_lang()=='cn') {echo '<script type="text/javascript" src="scripts/jquery-validate/val-cn.js"></script>';} ?>

common.php:

解决方案

发生这种情况的原因有多种:

  1. 您通过 setcookie() 或 session_start() 间接发送 HTTP 标头.

    看看你的 set_lang() 函数.您可以通过在输出前调用 l() 来修复它.

  2. 在 PHP 开始标记之前或 PHP 结束标记之后有空格.

  3. 您以 UTF-8 格式保存文件,但使用 BOM.无需 BOM 即可保存.

您可以随时添加ob_start(),但这只能绕过问题.

I'm getting this:

Warning: Cannot modify header information - headers already sent by

(output started at /www/zxq.net/a/l/e/alexchen/htdocs/index.php:12) in /www/zxq.net/a/l/e/alexchen/htdocs/common.php on line 13

right on my h2 tag.

I have my common.php before the html code. I don't know what the problem is. Help!

index.php:

<?php
include_once 'common.php';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>
    <title>New Project</title>
    <link rel="stylesheet" type="text/css" href="styles/global.css" />
    <link rel="stylesheet" type="text/css" href="styles/slimbox2.css" />
    <script type="text/javascript" src="scripts/jquery-1.3.2.min.js"></script>
    <script type="text/javascript" src="scripts/jquery.validate.js"></script>
    <script type="text/javascript" src="scripts/slimbox2.js"></script>
    <script type="text/javascript" src="scripts/jquery.scrollTo-min.js"></script>
    <script type="text/javascript" src="scripts/jquery.localscroll-min.js"></script>
    <script type="text/javascript" src="scripts/custom.js"></script>
    <?php if(get_lang()=='en') {echo '<script type="text/javascript" src="scripts/jquery-validate/val-en.js"></script>';} ?>
    <?php if(get_lang()=='es') {echo '<script type="text/javascript" src="scripts/jquery-validate/val-es.js"></script>';} ?>
    <?php if(get_lang()=='tw') {echo '<script type="text/javascript" src="scripts/jquery-validate/val-tw.js"></script>';} ?>
    <?php if(get_lang()=='cn') {echo '<script type="text/javascript" src="scripts/jquery-validate/val-cn.js"></script>';} ?>

common.php:

<?php
session_start();
header('Cache-control: private'); // IE 6 FIX

function get_lang(){
    if(!empty($_GET['lang'])) return $_GET['lang'];
    if(!empty($_SESSION['lang'])) return $_SESSION['lang'];
    if(!empty($_COOKIE['lang'])) return $_COOKIE['lang'];
    return 'en';
}

function set_lang($lang){
    setcookie("lang", $lang, time() + (3600 * 24 * 30));
    $_SESSION['lang'] = $lang;
}

function get_lang_file($lang){
    $lang_file = "languages/lang.$lang.php";
    if(file_exists($lang_file)) return $lang_file;
    if($lang_file = get_lang_file('en')) return $lang_file;
    return false;
}

//translation helper function
function l($string){
    static $translation;

    if(!isset($translation)){
        $lang = get_lang();
        $lang_file = get_lang_file($lang);
        if($lang_file) set_lang($lang);
        $translation = include $lang_file;
    }

    return $translation[$string];
}
?>

解决方案

It can happen for several reasons:

  1. You are sending HTTP headers indirecly, via setcookie() or session_start().

    Have a look at your set_lang() function. You can fix it by calling l() before output.

  2. You have whitespace before the PHP open tag or after PHP close tag.

  3. You saved the file in UTF-8, but with BOM. Save it without BOM.

You can always add ob_start(), but this will only bypass the problem.

这篇关于我收到一个 php 警告:无法修改头信息(但我在 html 代码之前有我的包含文件!)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆