За последние 24 часа нас посетил 17941 программист и 1582 робота. Сейчас ищут 1295 программистов ...

Не пойму в чём причина ошибки

Тема в разделе "PHP для новичков", создана пользователем Seref, 28 дек 2011.

  1. Seref

    Seref Активный пользователь

    С нами с:
    8 авг 2011
    Сообщения:
    2
    Симпатии:
    0
    Код (Text):
    1. <?php
    2. include("blocks/bd.php");
    3. if (!isset($_SERVER['PHP_AUTH_USER']))
    4. {
    5. Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
    6. Header ("HTTP/1.0 401 Unauthorized");
    7. exit();
    8. }
    9.  
    10. else {
    11.         if (!get_magic_quotes_gpc()) {
    12.                 $_SERVER['PHP_AUTH_USER'] = mysql_escape_string($_SERVER['PHP_AUTH_USER']);
    13.                 $_SERVER['PHP_AUTH_PW'] = mysql_escape_string($_SERVER['PHP_AUTH_PW']);
    14.         }
    15.  
    16.         $query = "SELECT pass FROM userlist WHERE user='".$_SERVER['PHP_AUTH_USER']."'";
    17.         $lst = @mysql_query($query);
    18.  
    19.         if (!$lst)
    20.         {
    21.             Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
    22.         Header ("HTTP/1.0 401 Unauthorized");
    23.         exit();
    24.         }
    25.  
    26.         if (mysql_num_rows($lst) == 0)
    27.         {
    28.            Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
    29.            Header ("HTTP/1.0 401 Unauthorized");
    30.            exit();
    31.         }
    32.  
    33.         $pass =  @mysql_fetch_array($lst);
    34.         if ($_SERVER['PHP_AUTH_PW']!= $pass['pass'])
    35.         {
    36.            Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
    37.            Header ("HTTP/1.0 401 Unauthorized");
    38.            exit();
    39.         }
    40. }
    41. ?>
    На выходе выводит ошибку

    Warning: Cannot modify header information - headers already sent by (output started at Z:\home\php.loc\www\phpsite\admin\index.php:2) in Z:\home\php.loc\www\phpsite\admin\lock.php on line 5
    Warning: Cannot modify header information - headers already sent by (output started at Z:\home\php.loc\www\phpsite\admin\index.php:2) in Z:\home\php.loc\www\phpsite\admin\lock.php on line 6

    Как это исправить? В чём ошибка?
     
  2. ss64

    ss64 Активный пользователь

    С нами с:
    25 мар 2010
    Сообщения:
    35
    Симпатии:
    0
    вероятно вот тут где то проскакивают лишние байты
    include("blocks/bd.php");

    пробни сделать вот как:


    Код (Text):
    1. <?php
    2. [b]ob_start();[/b]
    3. include("blocks/bd.php");
    4. if (!isset($_SERVER['PHP_AUTH_USER']))
    5. {
    6. Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
    7. Header ("HTTP/1.0 401 Unauthorized");
    8. exit();
    9. }
    10.  
    11. else {
    12.         if (!get_magic_quotes_gpc()) {
    13.                 $_SERVER['PHP_AUTH_USER'] = mysql_escape_string($_SERVER['PHP_AUTH_USER']);
    14.                 $_SERVER['PHP_AUTH_PW'] = mysql_escape_string($_SERVER['PHP_AUTH_PW']);
    15.         }
    16.  
    17.         $query = "SELECT pass FROM userlist WHERE user='".$_SERVER['PHP_AUTH_USER']."'";
    18.         $lst = @mysql_query($query);
    19.  
    20.         if (!$lst)
    21.         {
    22.             Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
    23.         Header ("HTTP/1.0 401 Unauthorized");
    24.         exit();
    25.         }
    26.  
    27.         if (mysql_num_rows($lst) == 0)
    28.         {
    29.            Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
    30.            Header ("HTTP/1.0 401 Unauthorized");
    31.            exit();
    32.         }
    33.  
    34.         $pass =  @mysql_fetch_array($lst);
    35.         if ($_SERVER['PHP_AUTH_PW']!= $pass['pass'])
    36.         {
    37.            Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
    38.            Header ("HTTP/1.0 401 Unauthorized");
    39.            exit();
    40.         }
    41. }
    42.  
    43. [b]echo ob_get_clean();[/b]
    44. ?> // А эту штуку лучше не закрывай, вероятно в инклуде после неё пробел попался поэтому и такая ерунда.
    Кстати
    ob_get_clean
    Автоматом выводит буфер, когда завершаешься по exit, die и подобным
     
  3. ss64

    ss64 Активный пользователь

    С нами с:
    25 мар 2010
    Сообщения:
    35
    Симпатии:
    0
    Точнее *ob_start
    Можешь использовать вложенные, но проверяй чтобы они закрывались, это тоже самое как со скобками и кавычками
    есть открывающий и закрывающий, они всегда должны быть парными.

    Хедер только в одном случае не отправляется - когда что то отпралвено.
     
  4. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Кодировка utf-8 (без BOOM) ?
    Z:\home\php.loc\www\phpsite\admin\index.php

    Z:\home\php.loc\www\phpsite\admin\lock.php

    Попробуй перевести если не переведено.

    У меня из - за кодировки возникало такое.