На Ирбисе нашёл тему про защиту и применил её у себя, но при подлючении файла 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. Как то так.
Не только до доктайпа.
Вообще, чтоб не было проблем с заголовками и ошибкой "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 написал(а):
да вот это:
переставь вот так:
так как до вызова header в файле includes/lock.php у тебя выводится <!DOCTYPE HTML>[/html], чего не должно быть
<!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'])){ в начало кода. |
Путное Игорь написал, вот пример, у меня в админке. Переделай под себя, и после него расположи всё, что должно выводиться на страничку при правильном логине-пароле
<?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();
};
};
?>