|
|
|
| Добрый день .
Только недавно начал программировать на пхп так что не пинайте .
на сервере стоит линукс апаче 1.3 и пхп 4 .
Вот пример скрипта , который я исполняю :
<html>
<head>
<title></title>
</head>
<body>
<h4>Введите логин и пароль </h4>
<form action="<?php echo $PHP_SELF ; ?> " method=post enctype=multipart/form-data>
<input type=text name=login>
<input type=password name=pass >
<input type=submit name="submit" value=Ok></form>
<?php
$dir=$DOCUMENT_ROOT."/login";
if ($submit) {
$data=file($dir);
if ((trim($data[0])==trim($login)) and (trim($data[1])==trim($pass)))
{ header ("Location: indexadmin.php "); exit();
} else echo("Incorrect login" );
}
?>
</body>
</html>
Проблема заключяется в том , апач 1.3 не хочет выполнять header ("Location: indexadmin.php ");
и в ответ я получаю Warning: Cannot add header information - headers already sent by (output started at /var/oxotnikvl/admin.php:4) in /admin.php on line 13 .Ради любопытства я переписал скрипт к другу на сервер с таким же апачем и пхп и у него такой пролемы не произошло .
Я предпологаю что проблема в конфигах апача или пхп .
Помогите кто чем может . | |
|
|
|
|
|
|
|
для: gvidon
(06.04.2010 в 07:18)
| | Апач тут не при чем, это ваша ошибка. Заголовки должны передаваться до любого вывода в браузер, а у вас перед его передачей выводится html-код, вот вы и получаете ошибку.
Прежде чем пинать Апач или конфигурацию, читать надо мануал, который гласит (о header):
Помните, что header() обязана вызываться до отправки любого вывода: нормальными ли тэгами HTML, пустыми строками в файле, или из PHP. Очень частой ошибкой является чтение кода функциями include() или require(), или другой функцией доступа к файлу, и наличие пробелов или пустых строк, которые выводятся до вызова header(). Та же проблема возникает при использовании единого PHP/HTML-файла. | |
|
|
|
|
|
|
|
для: sim5
(06.04.2010 в 07:29)
| | Спасибо за ответ .
Мне интересно почему на другом вебсервере все заработало ?
http://oxotnikvl.ru/admin.php мой сервер где не работает
http://www.sferamarket.ru/~neosfera/admin.php там где работает | |
|
|
|
|
|
|
|
для: gvidon
(06.04.2010 в 07:50)
| | Вот только не надо о том, что заработало. У вас не заработало (перехода не произойдет), а просто подавлен вывод ошибок на другом сервере. Читайте мануал и исправляйте свой скрипт. | |
|
|
|
|
|
|
|
для: sim5
(06.04.2010 в 07:55)
| | А если вывод ошибки подавлен то почему все таки директива сработала и у меня открылась следующая страница ??? если не тяжело нажмите на кнопку ок . | |
|
|
|
|
|
|
|
для: gvidon
(06.04.2010 в 07:59)
| | Зачем мне жать на вашу кнопку? Такого быть не может.
<?
<?
//не реагируем на ошибки
error_reporting(~E_ALL);
//и отключаем их вывод
ini_set("display_errors", "off");
?>
<form action=""><input type="submit" name="sender" value="GO"></form>
<?
//а перехода все равно не будет
if(isset($_GET['sender'])) header('location: test.php');
?>
|
А теперь две первыых строки кода пропишите так:
error_reporting(E_ALL);
ini_set("display_errors", "on");
Запустите, что получите?
Читайте мануал и пишите не так как вам хочется, а как требуется. | |
|
|
|
|
|
|
|
для: sim5
(06.04.2010 в 08:29)
| | а каким образом можно перенаправить на другую страницу тогда ? | |
|
|
|
|
|
|
|
для: gvidon
(06.04.2010 в 08:48)
| | Если вы решили писать на РНР, то читайте мануал, учебники. Не изучите вы его никогда, задавая лишь вопросы.
Решить вашу проблему можно двумя способами - первый буферизация вывода (читайте в мануале, что это такое, в первую очередь, а уж потом вопросы), и второй, это переписать свой скрипт так, чтобы отправление заголовка было до любого вывода в браузер. Это сделать не трудно в вашем коде, вот тут можно не заглядывать в мануал, а лишь немного подумать. Попробуйте сперва сами это сделать, а если не получится, тогда с вопросом... | |
|
|
|
|
|
|
|
для: gvidon
(06.04.2010 в 07:18)
| | В php.ini есть специальная директика - output_buffering. Ее значение по умолчанию - 0. Это говорит о том, что весь вывод сразу направляется клиенту, как только он прочитывается в скрипте. В этом случаи вы не можете отправить HTTP-заголовки после того как уже началась передача тела HTTP-документа.
Если не хотите переписывать код, то можно выйти из этой ситуации следующий способом:
Нужно вывод перед отправкой сложить в буфер. Тогда будет неважно в какой последовательности у вас в коде фигурируют заголовки и вывод - PHP все равно ничего не отправит до того момента, пока не исполнит весь скрипт.
Активировать буферизацию вывода можно следующими путями:
1. Изменить значение директивы output_buffering на on
2. Активировать буферизацию вывода в самом php - скрипте с помощью функции ob_start()
Первый вариант вам подойдет только в том случаи, если вы можете изменять файл php.ini.
Если такой возможности нет и вы решите использовать второй вариант, то в самом начале скрипта разместите следующий код:
<?php
ob_start();
?>
<html>
<head>
<title></title>
</head>
<body>
..................
..................
|
P.S. пока печатал ответ, тоже самое уже сказали)) | |
|
|
|
|
|
|
|
для: tihonko
(06.04.2010 в 08:57)
| | Огромное СПАСИБО tihonko !!!! .
Я включил буферизацию и все заработало :)
Временно буду использовать буфферизацию но немного позже подумаю о переделке скрипта . | |
|
|
|
|
|
|
|
для: gvidon
(06.04.2010 в 09:04)
| | Пожалуйста! | |
|
|
|
|
|
|
|
для: tihonko
(06.04.2010 в 08:57)
| | >Нужно вывод перед отправкой сложить в буфер.
>Тогда будет неважно в какой последовательности у вас в коде фигурируют заголовки и вывод - PHP все равно ничего не отправит до того момента, пока не исполнит весь скрипт.
Это, мягко говоря, несовсем так.
Размер буфера ограничен. | |
|
|
|
|
|
|
|
для: Trianon
(06.04.2010 в 13:19)
| | Перечитал мануал:
http://www.php.net/manual/en/function.ob-start.php
Но там в описании функции сказано лишь то, что у нее есть второй необязательный параметр $chunk_size и если он принимает значение по умолчанию(0), то вывод будет отправлен только в конце работы скрипта. Отдельной директивы chunk_size в php.ini тоже не нашел.
Скажите пожалуйста, какой величиной ограничен размер буфера и как ее регулировать? | |
|
|
|