Начало сеанса и не может изменить заголовок

0

У меня есть эта проблема в журнале ошибок:

PHP Warning:  session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cache limiter - headers already sent (output started at /home/site/public_html/index.php:1) in /home/site/public_html/controller/controller.php on line 5   <---   and this on admin panel error log --->  PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/site/public_html/config.php:1) in /home/site/public_html/functions/functions.php on line 24

PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/site/public_html/config.php:1) in /home/site/public_html/admin/auth/index.php on line 8

Все работает нормально на моем локальном сервере, но на хостинге я не могу использовать панель администратора нормально. я должен вводить полный путь в браузере для подключения, и что я меняю somthing на admin, я должен повторить его снова. извините за мой плохой английский, если какой-то я понимаю, что мне нужна помощь.

<?php
define('site', TRUE);
session_start();
include $_SERVER['DOCUMENT_ROOT'].'/config.php';

if($_SESSION['auth']['admin']){
header("Location: ../");
exit;
}

if($_POST){
$login = trim(mysql_real_escape_string($_POST['user']));
$pass = trim($_POST['pass']);
$query = "SELECT .......................... = '$login' AND id_role = 2 LIMIT 1";
$res = mysql_query($query);
$row = mysql_fetch_assoc($res);
if($row['password'] == md5($pass)){
$_SESSION['auth']['admin'] = htmlspecialchars($row['name']);
$_SESSION['auth']['user_id'] = $row['customer_id'];
header("Location: ../");
exit;
}else{
$_SESSION['res'] = '<div class="error">wrong pass!</div>';
header("Location: {$_SERVER['PHP_SELF']}");
exit;
}
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"                                                   ....    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="../<?=ADMIN_TEMPLATE?>style.css" />
<title>admin</title>
</head>

<body>
<div class="karkas">
<div class="head">
    <a href="#"><img src="../<?=ADMIN_TEMPLATE?>images/logoAdm.jpg" /></a>
    <p>log admin</p>
</div>
<div class="enter">
<?php 
if(isset($_SESSION['res'])){
echo $_SESSION['res'];
unset($_SESSION['res']);
}
?>
<form method="post" action="">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td>Username:</td>
<td><input type="text" name="user" /></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="pass" /></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type="image" src="../<?=ADMIN_TEMPLATE?>images/enter_btn.jpg" name="submit" /></td>
</tr>
</table>      
</form>
</div>
</div>
</body>
</html>

config.php

<?php

defined('site') or die('Access denied');
define('PATH', 'http://site');
define('MODEL', 'model/model.php');
define('CONTROLLER', 'controller/controller.php');
define('VIEW', 'views/');
define('TEMPLATE', PATH.VIEW.'site/');
define('PRODUCTIMG', PATH.'userfiles/product_img/baseimg/');
define('GALLERYIMG', PATH.'userfiles/product_img/');
define('SIZE', 1048576);
define('HOST', 'localhost');
define('USER', 'sdfsdfsdfsd');
define('PASS', 'sdfsdfsdfsd');
define('DB', 'sdfsdfsdfsd');
define('TITLE', 'სახლი რომელიც შენია!');
define('ADMIN_EMAIL', '[email protected]');
define('PERPAGE', 9);
define('ADMIN_TEMPLATE', 'templates/');
mysql_connect(HOST, USER, PASS) or die('No connect to Server');
mysql_select_db(DB) or die('No connect to DB');
mysql_query("SET NAMES 'UTF8'") or die('Cant set charset');

Файл индекса AUTH

<?php
define('site', TRUE);
session_start();

include $_SERVER['DOCUMENT_ROOT'].'/config.php';

if(!$_SESSION['auth']['admin']){
header("Location: " .PATH. "admin/auth/enter.php");
exit;
}else{
header("Location: " .PATH. "admin/");
exit;
}
  • 1
    Это из-за проблем кодировки символов UTF-8.
  • 1
    Итак, что в строке config.php 1?
Показать ещё 7 комментариев
Теги:
session

1 ответ

0

попробуйте ob_start(); в начале.

Это будет буферизовать вывод до конца сценария, и в большинстве случаев вы не получите предупреждение Can not change header information. подробнее здесь. Ваш код должен быть таким (первый файл, который вы запрашиваете HTTP):

<?php
ob_start();
session_start();
define('site', TRUE);
include $_SERVER['DOCUMENT_ROOT'].'/config.php';
...

В вашем коде, как правило, предупреждение создается вашими попытками (header, die), поэтому буферизация должна быть включена раньше.

Кроме того, поскольку предупреждения находятся в первой строке, что означает, что вывод должен быть там, и при условии, что у вас нет лишних пробелов и отступов, проверьте кодировку файлов (index.php, config.php) и сохраните их как UTF-8 без спецификации.

  • 0
    это не поможет
  • 0
    @lev Просто чтобы уточнить, ob_start(); должен быть в первом блоке кода (index.php), а не в config.php. Поместите session_start() чуть ниже.
Показать ещё 16 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню