Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использование header('location: '), многократная переадресация 
V
    Опции темы
s0lman
Дата 21.1.2008, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и лохматый
**


Профиль
Группа: Участник
Сообщений: 637
Регистрация: 1.11.2007
Где: Ukraine

Репутация: 9
Всего: 29



Здравствуйте.
Имею элементарное подобие админпанели
файл switch.php
Код

Error_Reporting(E_ALL & ~E_NOTICE);
define('CONFIG',$_SERVER['DOCUMENT_ROOT'].'/config.php');
include(CONFIG);
define('SETCONFIG', 'http://' . $_SERVER['SERVER_NAME'].'/'.$setconfig);
if(fopen(CONFIG,"rb")){    
switch($sendto){
        case "one": {echo "<a href='".SETCONFIG."?both'>Включить переадресацию</a>";break;}
        case "both": {echo "<a href='".SETCONFIG."?one'>Отключить переадресацию</a>";break;}
    }}


config.php
Код

$sendto = "one";

$switch = "switch.php";

$setconfig = "setconfig.php";


setconfig.php
Код

Error_Reporting(E_ALL & ~E_NOTICE);
define('CONFIG',$_SERVER['DOCUMENT_ROOT'].'/config.php');
include(CONFIG);
if(isset($_GET['both'])){$confmas['sendto']="both";header('location: '.$switch);}
if(isset($_GET['one'])){$confmas['sendto']="one";header('location: '.$switch);}
$confmas['switch']=$switch;
$confmas['setconfig']=$setconfig;

...
 запись в файл
...

теперь собственно вопрос.
почему после щелчка по ссылке "Включить переадресацию" получаю сообщение
Warning: Cannot modify header information - headers already sent by (output started at /sata1/home/users/creditonl/www/www.credit-online.in.ua/config.php:15) in /sata1/home/users/creditonl/www/www.credit-online.in.ua/setconfig.php on line 12
хотя нужное значение в config.php записывается.
отключение же проходит "гладко".


--------------------
Когда я уже выучусь на волшебника? :(
PM   Вверх
GeneralElectric
Дата 21.1.2008, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 13
Всего: 16



во-первых, после заголовка Location нельзя писать никакой код. поскольку нет гарантии, что он будет выполнен.
во-вторых, тебе же все пишет: в 15 строке файла  config.php идет вывод в браузер. следовательно, заголовки уже отправить нельзя.
подробнее можно почитать здесь: http://phpfaq.ru/headers

Добавлено через 1 минуту и 14 секунд
ой! а зачем ты открываешь config.php на чтение?
PM MAIL   Вверх
s0lman
Дата 21.1.2008, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и лохматый
**


Профиль
Группа: Участник
Сообщений: 637
Регистрация: 1.11.2007
Где: Ukraine

Репутация: 9
Всего: 29



Цитата(GeneralElectric @ 21.1.2008,  15:39)
а зачем ты открываешь config.php на чтение?

действительно.... зачем?  smile 
но на конечный результат ессесно не влияет.


--------------------
Когда я уже выучусь на волшебника? :(
PM   Вверх
MoLeX
Дата 21.1.2008, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Цитата(s0lman @  21.1.2008,  15:58 Найти цитируемый пост)
действительно.... зачем? 

это у тебя надо спрашивать уважаемый)


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
s0lman
Дата 21.1.2008, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и лохматый
**


Профиль
Группа: Участник
Сообщений: 637
Регистрация: 1.11.2007
Где: Ukraine

Репутация: 9
Всего: 29



единственное не пойму - какой вывод в config.php?
там только присваивание значений переменным.


--------------------
Когда я уже выучусь на волшебника? :(
PM   Вверх
smartov
Дата 21.1.2008, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



s0lman, 
Цитата(s0lman @  21.1.2008,  13:45 Найти цитируемый пост)
почему после щелчка по ссылке "Включить переадресацию" получаю сообщение

После header('Location...') должен сразу идти exit;
Код

if(isset($_GET['both'])){$confmas['sendto']="both";header('location: '.$switch);exit;}
if(isset($_GET['one'])){$confmas['sendto']="one";header('location: '.$switch);exit;}


В 12 строке файла setconfig.php скорее всего возникает notice или warning, который не может корректно появиться потому, что хедеры уже отправлены ранее.

---

Вышенаписанное неверно

Это сообщение отредактировал(а) smartov - 22.1.2008, 14:34
PM MAIL   Вверх
vasac
Дата 21.1.2008, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



Цитата(GeneralElectric @  21.1.2008,  15:39 Найти цитируемый пост)
во-первых, после заголовка Location нельзя писать никакой код. поскольку нет гарантии, что он будет выполнен.

Что за чепухень? Какая разница интерпретатору, что там было послано в функции header()?
Более того, после Location по-правильному желательно вывести страницу, с описанием ситуации, и, не плохо бы, META-переадресацией.
PM WWW   Вверх
GeneralElectric
Дата 21.1.2008, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 13
Всего: 16



интерпретатору такая разница, что ему браузер закроет соединение. и скрипт завершится.

по поводу канонической отработки Location - это да. соглашусь, что желательно писать текстовое сообщение и ссылку.
но на практике, поскольку никто никогда не сталкивался с клиентами, не поддерживающими 3хх, этим все пренебрегают.
PM MAIL   Вверх
Staind
Дата 21.1.2008, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 17.12.2007
Где: Планета сокровищ

Репутация: 2
Всего: 3



Цитата

Что за чепухень? Какая разница интерпретатору, что там было послано в функции header()?

Человек же привел статью, если читать влом, не пишите глупостей: http://phpfaq.ru/headers

--------------------
Ничто так не раздражает человека, как просьба успокоиться
PM MAIL WWW ICQ   Вверх
GeneralElectric
Дата 21.1.2008, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 13
Всего: 16



Staind, в статье речь о том, что пишется до header
а здесь разговор зашёл о том, что после =)
PM MAIL   Вверх
Staind
Дата 21.1.2008, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 17.12.2007
Где: Планета сокровищ

Репутация: 2
Всего: 3



Понял, значит вот статейка: http://www.php.su/functions/?header
--------------------
Ничто так не раздражает человека, как просьба успокоиться
PM MAIL WWW ICQ   Вверх
GeneralElectric
Дата 21.1.2008, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 13
Всего: 16



Гм. Ну, там я тоже не увидел по теме разговора.
Она, напомню, состоит в том, что я порекомендовал не полагаться на то, что код, следующий за location, будет весь исполнен.
то есть, ситуация, противоположная установке exit - здесь exit не ставится специально.
Хотя теперь я в этом не уверен. Надо автора спросить
PM MAIL   Вверх
smartov
Дата 21.1.2008, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Код после header('location...') может быть при чем какой угодно. Что тут такого. Просто нужно помнить, что хедеры отосланы, и при попытке вывести echo что-нибудь php сам попытается заново отослать хедеры, что у него, естественно, не получится.
PM MAIL   Вверх
flashaa
Дата 21.1.2008, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Цитата(smartov @  21.1.2008,  16:42 Найти цитируемый пост)
скорее всего возникает notice или warning,

Ещё могут быть лишние фрагменты текста вне тегов <?php ?> - тоже частые и трудновылавливаемые грабли.
К примеру:
Код

<?php
...
?> \n

Любой текст вне тегов <?php ?> будет вывыден в браузер,  в примере - лишний перенос строки в конце. При чем проверять надо все включаемые до header() файлы.
PM MAIL   Вверх
s0lman
Дата 21.1.2008, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и лохматый
**


Профиль
Группа: Участник
Сообщений: 637
Регистрация: 1.11.2007
Где: Ukraine

Репутация: 9
Всего: 29



Да господа если кого-то интересует
после location прописал .$_SERVER['HTTP_REFERER'] и все отлично работает  smile 
хотя чем это принципиально отличается от того что было я так и не понял.


--------------------
Когда я уже выучусь на волшебника? :(
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0575 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.