Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Cannot modify header information - headers already sent by
 
 автор: ildarufa   (26.11.2009 в 20:13)   письмо автору
 
 

Я попробовал сделать авторизацию как в книге "Практика...", второе издание. Тестировал в Денвере. Пишет ошибку
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\mycms.ru\www\adminpage\index.php:1) in Z:\home\mycms.ru\www\adminpage\utils\security.php on line 6
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\mycms.ru\www\adminpage\index.php:1) in Z:\home\mycms.ru\www\adminpage\utils\security.php on line 7

Файл \adminpage\index.php начинается так: require_once("utils/security.php");
Файл security.php точно такой же, как в книге security_mod.php
Шестая и седьмая строчки такие:
    Header("WWW-Authenticate: Basic realm=\"Admin Page\""); 
    Header("HTTP/1.0 401 Unauthorized"); 

А вообще начало такое:
<?php 
require_once("config.php");
  
// Если пользователь не авторизовался - авторизуемся
  
if(!isset($_SERVER['PHP_AUTH_USER']) || (!empty($_GET['logout']) && $_SERVER['PHP_AUTH_USER'] == $_GET['logout'])) 
  { 
    
Header("WWW-Authenticate: Basic realm=\"Admin Page\""); 
    
Header("HTTP/1.0 401 Unauthorized"); 
    exit(); 
  }

Не могу понять, в чём ошибка.

  Ответить  
 
 автор: tvv123456   (26.11.2009 в 21:09)   письмо автору
 
   для: ildarufa   (26.11.2009 в 20:13)
 

у вас может пробел стоит перед <?php (причем в файле index.php)
раз первая строчка то наверняка проблема в этом
А так суть ошибки в том что заголовки ушли раньше(на 1 строке index.php) чем вы саморучно их отправляете

  Ответить  
 
 автор: ildarufa   (26.11.2009 в 22:28)   письмо автору
 
   для: tvv123456   (26.11.2009 в 21:09)
 

Не нашёл пробела.

  Ответить  
 
 автор: Valick   (26.11.2009 в 23:10)   письмо автору
 
   для: ildarufa   (26.11.2009 в 22:28)
 

ищи в config.php пробелы, причём как до <?php так и после ?>

  Ответить  
 
 автор: Николай2357   (27.11.2009 в 00:25)   письмо автору
 
   для: ildarufa   (26.11.2009 в 22:28)
 

Вот тут же написано:
output started at Z:\home\mycms.ru\www\adminpage\index.php:1
Это редактор настроен с БОМ. Три байта все дело портят.

  Ответить  
 
 автор: tvv123456   (27.11.2009 в 00:58)   письмо автору
 
   для: ildarufa   (26.11.2009 в 22:28)
 

>Не нашёл пробела.
ну смотрите что у вас в 1-ой строке файла index.php заголовки уходят именно с этой строки

  Ответить  
 
 автор: Trianon   (27.11.2009 в 01:09)   письмо автору
 
   для: tvv123456   (27.11.2009 в 00:58)
 

да не что в первой строчке, а что в первом байте.
И если там нечто отличное от 0x3C - дальше можно не писать.

  Ответить  
 
 автор: GeorgeIV   (27.11.2009 в 09:59)   письмо автору
 
   для: Trianon   (27.11.2009 в 01:09)
 

Обычно все ищут проблему в первой строчке (пробел перед тегом), я столкнулся с тем, что у меня проблема с хедерами была, когда я подключил файл, у которого пробел был ПОСЛЕ последнего тега ?>

  Ответить  
 
 автор: Trianon   (27.11.2009 в 12:13)   письмо автору
 
   для: GeorgeIV   (27.11.2009 в 09:59)
 

и она тоже диагностировалась как output started at file:1?

  Ответить  
 
 автор: tvv123456   (27.11.2009 в 12:24)   письмо автору
 
   для: Trianon   (27.11.2009 в 12:13)
 

А РЕШЕНИЕ ПРОБЛЕМЫ КАКОЕ? я у себя удалил когда-то полностью 1-ую строку и заново прописал открытие рнр(вроде больше проблем не было)

  Ответить  
 
 автор: Trianon   (27.11.2009 в 12:28)   письмо автору
 
   для: tvv123456   (27.11.2009 в 12:24)
 

я это (27.11.2009 в 01:09) - Вам написал?

Решение любой проблемы начинается с её (проблемы) понимания.

  Ответить  
 
 автор: tvv123456   (27.11.2009 в 12:31)   письмо автору
 
   для: Trianon   (27.11.2009 в 12:28)
 

я со своим опытом в 2 месяца не понял :) думаю кто-то еще не поймет
(про 2 месяца это насмешка над собой(чтоб никто не обиделся))

  Ответить  
 
 автор: Trianon   (27.11.2009 в 13:54)   письмо автору
 
   для: tvv123456   (27.11.2009 в 12:31)
 

Что я непонятно написал?
Первым байтом файла должен быть байт с кодом символа < (начало <?php)
Последним байтом (подключаемого) файла должен быть байт с кодом символа > (хвост ?>)
Что непонятно?

  Ответить  
 
 автор: tvv123456   (27.11.2009 в 13:57)   письмо автору
 
   для: Trianon   (27.11.2009 в 13:54)
 

Не так то конечно понятно просто 0x3C - не очень было понятно :), но вообщем суть я правильно автору указал, первый символ в строке не <, а скорее всего пробел, но автор его не нашел как и я в свое время не смог найти(пришлось всю строку удалять)
Думаю остальные обсуждения бесмыслены

  Ответить  
 
 автор: Trianon   (27.11.2009 в 14:02)   письмо автору
 
   для: tvv123456   (27.11.2009 в 13:57)
 

Суть у нас как раз кардинально отличается.
Вы говорите про первый символ первой строки, а я про первый байт.
В зависимости от субъективной трактовки они запросто могут не соответствовать друг другу.

Отсюда следует еще и та простая мысль, что первое движение при анализе проблемы headers already sent - движение в сторону hex-viewer'а файлов.
Текстовый редактор покажет всякое разное. Шестнадцатеричный просмотрщик по F3/F4 в FAR или т.п. врать не станет.

  Ответить  
 
 автор: ildarufa   (27.11.2009 в 15:48)   письмо автору
 
   для: Trianon   (27.11.2009 в 14:02)
 

Действительно дело было в невидимом пробеле. Я просто поменял кодировку (сделал без BOM) и всё встало на свои места. Спасибо большое всем за помощь!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования