Ошибки в работе PHP как модуля разных систем

The Night Fury

Участник
Сообщения
1,300
Реакции
1,395
Доброго времени суток, форумчане.
Решив проблему, я подумал, что обсудить всё-таки стоит, поэтому, собственно, топик и создаю.

Суть
Какое-то время назад я поставил себе систему мониторинга LGSL 5.8. Всё было нормально, не видел сбоев, но потом ВНЕЗАПНО стали появляться баги.
Самым большим стал баг отправки информации хидера (функция в файле admin.php). Проблема заключалась в том, что после входа в админ-панель я не мог ничего сделать — любой переход по ссылкам внутри файла заканчивался фейлом, постоянно выкидывало на admin.php с просьбой войти. Перерыл систему, порылся в скриптах — нет толку. Ну и хрен с ним, ведь есть phpMyAdmin, верно? Только вот кэш там не сбросить было.
Вот сегодня пришлось удалить один из серверов, ну и из мониторинга тоже надо было удалить.
Порывшись как следует ещё раз, я решил изменить конфигурацию сайта: сменил конфигурацию "Использовать PHP как модуль CGI" на "Использовать PHP как модуль Apache" (ПУ — ISP Manager, если что). Ограничений нет, чтоб не спрашивали.
Ну и всё, ошибка исчезла.

Ошибка
Сама ошибка в логах как-то странно выглядела:
C-подобный:
[Fri Jun 28 20:26:18 2013] [error] [client *.*.*.*] PHP Warning:  Cannot modify header information - headers already sent by (output started at /var/www/%1337yoba1337%/data/www/***.***.tld/lgsl_files/lgsl_config.php:1) in /var/www/%1337yoba1337%/data/www/***.***.tld/admin.php on line 19, referer: http://***.***.tld/admin.php
В admin.php на строке 19 содержится соответственно:
PHP:
    setcookie("lgsl_admin_auth", $auth, (time() + (60 * 60 * 24)), "/");
PHP:
<?php
//------------------------------------------------------------------------------------------------------------+
  require "lgsl_files/lgsl_config.php";

  if (empty($lgsl_config['admin']['user']) || empty($lgsl_config['admin']['pass']))
  {
    exit("ADMIN USERNAME OR PASSWORD MISSING FROM CONFIG");
  }
  elseif ($lgsl_config['admin']['pass'] == "changeme")
  {
    exit("ADMIN PASSWORD MUST BE CHANGED FROM THE DEFAULT");
  }

  $auth   = md5($_SERVER['REMOTE_ADDR'].md5($lgsl_config['admin']['user'].md5($lgsl_config['admin']['pass'])));
  $cookie = isset($_COOKIE['lgsl_admin_auth']) ? $_COOKIE['lgsl_admin_auth'] : "";

  if (isset($_POST['lgsl_user']) && isset($_POST['lgsl_pass']) && $lgsl_config['admin']['user'] == $_POST['lgsl_user'] && $lgsl_config['admin']['pass'] == $_POST['lgsl_pass'])
  {
    setcookie("lgsl_admin_auth", $auth, (time() + (60 * 60 * 24)), "/");
    define("LGSL_ADMIN", TRUE);
  }
  elseif ($cookie == $auth)
  {
    setcookie("lgsl_admin_auth", $auth, (time() + (60 * 60 * 24)), "/");
    define("LGSL_ADMIN", TRUE);
  }

//  header("Content-Type:text/html; charset=utf-8");
//------------------------------------------------------------------------------------------------------------+
?>



<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1//EN' 'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd'>

<html xmlns='http://www.w3.org/1999/xhtml'>
  <head>
    <title>Live Game Server List</title>
    <meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
    <meta http-equiv='content-style-type' content='text/css' />
    <link rel='stylesheet' href='lgsl_style.css' type='text/css' />
  </head>

  <body>
    <div style='height:30px'><br /></div>




<?php
//------------------------------------------------------------------------------------------------------------+
  if (defined("LGSL_ADMIN"))
  {
    global $output;
    $output = "";
    require "lgsl_files/lgsl_admin.php";
    echo $output;
  }
  else
  {
    echo "
    <form method='post' action=''>
      <table style='margin:auto; text-align:center'>
        <tr><td> USERNAME: </td><td> <input type='text'     name='lgsl_user' value='' /> </td></tr>
        <tr><td> PASSWORD: </td><td> <input type='password' name='lgsl_pass' value='' /> </td></tr>
        <tr>
          <td colspan='2'>
            <br />
            <input type='submit' name='lgsl_admin_login' value='Login' />
          </td>
        </tr>
      </div>
    </form>";
  }
//------------------------------------------------------------------------------------------------------------+
?>



  </body>
</html>

Вопрос
Итак, "починить" получилось при помощи простой установки PHP как модуля Apache.
Вопрос: почему же так получается, что хидэр не получается изменить?
Вопрос 2: в чём может быть причина такого сбоя? Ничего не изменялось на сервере, но баг появился, несмотря на это.
 

Vaio

Участник
Сообщения
625
Реакции
215
Никаких echo перед перед отправкой хедеров.
 

TF Studio

Участник
Сообщения
227
Реакции
207
error_reporting в ноль и не париться.
это - не критическая ошибка.
 

The Night Fury

Участник
Сообщения
1,300
Реакции
1,395
Никаких echo перед перед отправкой хедеров.
В том-то и дело, что нет ничего до отправки хидера.

error_reporting в ноль и не париться.
это - не критическая ошибка.
Дело не в сообщении об ошибке, а в том, что куки "не пишутся" и выполнять действия после не выходит. Я вроде бы зашёл в панель администратора, но и не зашёл.
 
Сверху Снизу