[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Защита админки
veolancer
Возникла такая проблема->

На Ирбисе нашёл тему про защиту и применил её у себя, но при подлючении файла lock выдаёт ошибку что типо он не можеть изменить информацию, что заголовок уже был запущен.

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\site\admin\index.php:2) in Z:\home\localhost\www\site\admin\includes\lock.php on line 7

и так же ссылается на 8 линию.

Вот са код страницы

<!DOCTYPE HTML>
<?php

#Показ всех ошибок в php документе
error_reporting(E_ALL);

#Авторизация
nclude './includes/lock.php';

?>
<html>
<
head>
<
title></title>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<
link href="./style.css" rel="stylesheet" type="text/css">
<
link rel="icon" href="../favicon.ico" type="image/x-icon">
<
link rel="shortcut icon" href="../favicon.ico" type="image/x-icon">
</
head>
<
body>

<
div id="wrapper">
<?php include './includes/blocks/header.php'; ?>
<?php
include './includes/blocks/sidebar.php'; ?>
<div id="content">
<?php include './includes/blocks/left.php'; ?>
<div id="right">
</
div>
<
div class="clear"></div>
</
div>
<?php include './includes/blocks/footer.php'; ?>
</div>

</
body>
</
html>


и файл lock

<?php

mysql_connect ('localhost','admin','12345');
mysql_select_db('baza');

if(empty($_SERVER['PHP_AUTH_USER'])){
header('WWW-Authenticate: Basic realm="Administrative resource"');
header("HTTP/1.0 401 Unauthorised");
exit();
}

$res = mysql_query("
SELECT COUNT(*) FROM `user`
WHERE `login`='"
. mysql_real_escape_string($_SERVER['PHP_AUTH_USER']) ."'
AND `password`='"
. md5($_SERVER['PHP_AUTH_PW']) ."'");

if(mysql_result($res, 0) == 0){
header('WWW-Authenticate: Basic realm="Administrative resource"');
header ("HTTP/1.0 401 Unauthorized");
exit();
}


Таблицу в БД создал как полагается и пароль в md5 перевёл

Пробовал в разных браузерах, тоже самое. Кто что скажет по этому поводу?



Спустя 1 час, 5 минут, 10 секунд (30.01.2012 - 06:17) Alehandr написал(а):
Доктайп ниже отпусти, чтобы до инклуда никаких выводов не было.

Спустя 12 минут, 29 секунд (30.01.2012 - 06:29) veolancer написал(а):
Alehandr т.е. php код лучше писать до доктайпа во всех файлах? (совет)

Спустя 39 минут, 57 секунд (30.01.2012 - 07:09) Alehandr написал(а):
hamado
Не только до доктайпа.
Вообще, чтоб не было проблем с заголовками и ошибкой "Cannot modify header information - headers already sent" PHP код в котором нет HTML обычно не закрывают (не ставят ?>), а там где есть HTML, все инклуды идут выше вывода и вообще код стараются впихнуть как можно выше HTML. Как то так.

Спустя 7 минут, 18 секунд (30.01.2012 - 07:17) Игорь_Vasinsky написал(а):
if(empty($_SERVER['PHP_AUTH_USER'])){
header('WWW-Authenticate: Basic realm="Administrative resource"');
header("HTTP/1.0 401 Unauthorised");
exit();
}


в начало кода.

Спустя 14 часов, 17 минут, 17 секунд (30.01.2012 - 21:34) golovolom написал(а):
да вот это:

<!DOCTYPE HTML>
<?php

#Показ всех ошибок в php документе
error_reporting(E_ALL);

#Авторизация
nclude './includes/lock.php';



переставь вот так:
<?php  // в саой первой строчке

//Показ всех ошибок в php документе

error_reporting(E_ALL);

//Авторизация
nclude './includes/lock.php';
?>
<!DOCTYPE HTML>



так как до вызова header в файле includes/lock.php у тебя выводится <!DOCTYPE HTML>[/html], чего не должно быть

Спустя 1 час, 32 минуты, 24 секунды (30.01.2012 - 23:06) golovolom написал(а):
Цитата (Игорь_Vasinsky @ 30.01.2012 - 04:17)
if(empty($_SERVER['PHP_AUTH_USER'])){
header('WWW-Authenticate: Basic realm="Administrative resource"');
header("HTTP/1.0 401 Unauthorised");
exit();
}


в начало кода.

Путное Игорь написал, вот пример, у меня в админке. Переделай под себя, и после него расположи всё, что должно выводиться на страничку при правильном логине-пароле

<?php
function
auth_send()
{
header('WWW-Authenticate: Basic realm="Required to enter your login and password"');
header('HTTP/1.0 401 Unauthorized');
echo "
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<title>Доступ запрещён</title>
</head>
<body bgcolor=white link=blue vlink=blue alink=red>
<h1>Доступ запрещён.</h1>
Обратитесь к администратору для получения логина и пароля.
</body>
</html>"
;
exit;
};

if (!isset($_SERVER['PHP_AUTH_USER']))
{
auth_send();
}
else
{
$auth_user = $_SERVER['PHP_AUTH_USER'];
$auth_pass = $_SERVER['PHP_AUTH_PW'];
if (($auth_user != "1")||($auth_pass != "1")) // логин и пароль подставить какие нужно, или из файла доставать шифрованного
{
send_auth();
};
};
?>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.