Я получаю это:
Warning: Cannot modify header information - headers already sent by
(вывод начался с /www/zxq.net/a/l/e/alexchen/htdocs/index.php:12) в /www/zxq.net/a/l/e/alexchen/htdocs/common.php в режиме онлайн 13
- PDO IN () Задание массива и местозаполнитель
- Mysql_real_escape_string () Предупреждение Путаница
- Недопустимое смещение строки Предупреждение PHP
- Ошибка PHP: php_network_getaddresses: getaddrinfo не удалось: (при получении информации с другого сайта.)
- Невозможно изменить информацию заголовка Предупреждающее сообщение в PHP?
прямо на моем теге h2
.
У меня есть common.php
перед html-кодом. Я не знаю, в чем проблема. Помогите!
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]; } ?>
Ваша функция l()
вызывает set_lang()
при первом использовании, который устанавливает cookie – и файлы cookie отправляются как HTTP-заголовки.
Я предполагаю, что по его мнению, l()
используется для перевода переведенной версии строки, что означает, что она, вероятно, используется везде в вашем HTML / PHP; т.е. после того, как начался вывод.
Вы должны вызвать set_lang()
в верхней части вашего файла common.php
– чтобы убедиться, что cookie отправлен до любого содержимого HTML.
На самом деле, в вашем случае, я бы изменил функцию l()
так что это только одно: верните переведенную строку.
Я бы поставил инициализацию вашей системы перевода из l()
– что означает ее инициализацию «вручную» в начале вашего скрипта, да; но также означает более простую функцию l()
которая будет иметь меньше работы.
Это может произойти по нескольким причинам:
Вы отправляете HTTP-заголовки безоговорочно, через setcookie () или session_start ().
Посмотрите на свою функцию set_lang (). Вы можете исправить это, вызвав l () перед выходом.
У вас есть пробелы перед открытым тегом PHP или тегом тега PHP.
Вы сохранили файл в UTF-8, но с BOM . Сохраните его без спецификации.
Вы всегда можете добавить ob_start (), но это только обойдет проблему.
Настройка cookie требует отправки заголовка, поэтому вы не можете вызвать set_lang()
после выхода любой из страниц, если вы не используете функции буферизации вывода .
Попробуйте ob_start()
функцию ob_start()
в верхней части файла, где вы получаете эту ошибку.