Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: странный header->Location

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Вездеход
Отправлено: 06 Июля, 2009 - 15:23:26
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




юзаю такую форму переадресации в php:
CODE (text):
скопировать код в буфер обмена
  1. header("Location: index.php");


так вот щас при написании одной вещи на сайте нужно было сделать много переадресаций - в зависимости от условия на нужную страницу.

т.е выглядело все примерно так:
CODE (text):
скопировать код в буфер обмена
  1. if (условие1) {header("Location: index.php?p1");}
  2. if (условие2) {header("Location: index.php?p2");}
  3. if (условие3) {header("Location: index.php?p3");}
  4. echo "текст "; header("Location: index.php?p4");


так вот
у меня почему то даже если условие 1-3 выполнялись - переадресация все равно срабатывала 4я
даже при том, что там сперва выводится текст!

помогло только дописывание посла переадресации exit;

кто нибудь может сказать почему такое???

(Отредактировано автором: 06 Июля, 2009 - 15:23:39)



-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
Viper
Отправлено: 06 Июля, 2009 - 16:12:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




потому что после отсылки header php продолжает выполнение скрипта дальше. поэтому нужно тулить exit;


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Вездеход
Отправлено: 06 Июля, 2009 - 16:18:07
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




Viper
гм. ну если пересылка уже была - как же тогда он продолжает работу? ))


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
JustUserR
Отправлено: 06 Июля, 2009 - 17:06:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Viper Товарищ Вездеход имеет в иду почему же заголовок срабабывает если был послан текст в echo "text"; и почему не ыдается ошибка Cannot modify header inmormation
Вездеход Мне кажется что так происходит изза того что почемуто атоматически включается буферизация и се заголовки выводятся кучей - в общем баг
И я даже имел дело с аналогичным багом на perlе и там тоже вопрос решился с помощью exit;


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Ch_chov
Отправлено: 06 Июля, 2009 - 17:56:35
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Вездеход у тебя этот код находится тоже в index.php?
 
 Top
WNeZRoS
Отправлено: 06 Июля, 2009 - 18:05:34
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Май 2009  


Помог: 0 раз(а)




JustUserR пишет:
почемуто атоматически включается буферизация

Я думаю это из-за ранее посланного header'a на переадресацию, чтобы пока скрипт до выполняется перед глазами юзера не появилась лишняя инфа, он включает буферизацию..
 
 Top
JustUserR
Отправлено: 06 Июля, 2009 - 18:13:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




WNeZRoS Да вы правы - скорее всего так оно и есть Улыбка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
valenok Модератор
Отправлено: 06 Июля, 2009 - 19:02:24
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Просто апачи потом убирает старые перенаправления. Если вообще.
Может браузер сам с этим разбирается и перенаправляет по последнему. Проверь.

А почему должна вылететь ошибка с отсылкой заголовков тоже не понятно по какой логике.
Just_user, ты в курсе что с каждой страницой твой браузер получает не один, а порядка еще десяти заголовков ? По твоей логике сервер должен начинать дымиться сразу если его заставят отправить второй заголовок.. А надо еще много.

Ну и кому кому, но все равно скажу:
PHP исполняется на сервере. Заголовки и страница обрабатываются уже на другом компьютере уже задолго после того, как они были вообще сгенерированы.
set_cookie не останавливает же скрипт потому что заголовок добавили к выводу.


-----
Truly yours, Sasha.
 
My status
 Top
JustUserR
Отправлено: 06 Июля, 2009 - 19:27:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Многоуважаемый valenok я ас прошу ВНИМАТЕЛЬНО прочесть мое сообщние без сарказма а также ВНИМАТЕЛЬНО глянуть в приведенный код
Ято прекрасно это знаю и вы должны знать ЧТО ЗАГОЛОВОК ОТДЕЛЯЕТСЯ ОТ ТЕЛА ПУСТОЙ СТРОКОЙ
Как работает приведенный код - сначала отсылается один из заголовков Locaton - ПОТОМ ДЕЛАЕТСЯ echo "text"; и PHP заканчивает передавать заголовки (Если не было буферазиации) и ДЕЛАЕТ ПУСТУЮ СТРОКУ и потом переадет тело
И тут вдруг встречается еще один запоздалый заголовок Location и если он и пошлется то уже в тело ответа (ПОСЛЕ слова text)
И каким это чудесным образом по вашему браузер проанализирует ТЕЛО ответа и извлечет из него запоздашее ПОЛЕ ЗАГОЛОВКА
Обычно вылелает ошибка Cannot modify headers informtion а ТУТ ЕЕ НЕТ
Вот в этом и вопрос уваажемыйц
Что вы теперь скажете?


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Вездеход
Отправлено: 06 Июля, 2009 - 22:50:46
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




JustUserR пишет:
Обычно вылелает ошибка Cannot modify headers informtion а ТУТ ЕЕ НЕТ

да, ее не было. я даже прописал чтобы все ошибки вылетали при дебагинге ... =)

Ch_chov пишет:
Вездеход у тебя этот код находится тоже в index.php?

ну файл не index.php везде, но да. все в одном файле находится.

JustUserR пишет:
в общем баг

очень не хороший баг.. минут 30 убил на тесты его. как бороться и/или отлавливать не скажете? ну кроме прописывания exit;


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
JustUserR
Отправлено: 07 Июля, 2009 - 00:55:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Цитата:
Очень не хороший баг.. минут 30 убил на тесты его. как бороться и/или отлавливать не скажете? ну кроме прописывания exit;
Насколько я знаю даже поптка вручную выключить буферизацию не помогает
На PHP мне еще не доводилось такого ловить но приведу аналогию по Perl (Все равно смсл тот же) так вот в Perlе принято испаользовать фукнцию die для вывода ошибки и завершения работы и так даже она не помогала то есть даже если заменить echo "text"; на die "text"; то все равно заголовки шлются и шлются
Может это на CGI-шлюзе великий баг? У вас PHP случаем не через CGI/GastCGI работает?


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Вездеход
Отправлено: 07 Июля, 2009 - 10:35:17
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




JustUserR пишет:
У вас PHP случаем не через CGI/GastCGI работает?

да кто его знает... не знаю как на хосте все устроено.


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
JustUserR
Отправлено: 07 Июля, 2009 - 12:47:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Вездеход Дык в phpinfo() в это написано каким образом работает и что где лежит


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
valenok Модератор
Отправлено: 07 Июля, 2009 - 15:13:12
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Тогда скажу output_buffering отключите


-----
Truly yours, Sasha.
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB