- Не работает header php ini
- Переход через header не работает
- 2 ответа 2
- Всё ещё ищете ответ? Посмотрите другие вопросы с метками php javascript html или задайте свой вопрос.
- Похожие
- Подписаться на ленту
- Cannot modify header information — headers already sent by
- 3 ответа 3
- php Почему не работает редирект Warning: Cannot modify header information — headers already sent by. Ошибка Решение
- Primary tabs
- Forums:
- Описание частной проблемы
- Когда это бывает
- Корень проблемы
- Эксперимент
- Ещё раз уточним причину
- Key Words for FKN + antitotal forum (CS VSU):
- вопрос решился
- Но можно заставить работать и
- насчёт буферизации
- Что означает предупреждение «headers already sent»
Не работает header php ini
Здесь могла бы быть ваша реклама
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006
Откуда: Israel
Секрет
Теперь, когда вы уже наверняка второпях отправили свой запрос,
я расскажу вам простой секрет, который сэкономит вам уйму ожиданий,
даже если первый ответ по теме последуем сразу же.
Само собой я знаю что ответят мне тут же, и если я посмотрю
на сообщения на форуме, то пойму что в общем то я и не ошибаюсь.
Но еще я точно замечу, что очень мало тем, в которых всего два ответа :
вопрос автора и еще два сообщение вида Ответ + Спасибо
После этого приходится начинать уточнять этим неграмотным что мне надо.
Они что, сами читать не умеют? А уточнять приходится.
И иногда пока они переварят то что я им скажу проходит и не одна ночь..
Уверен что если бы я им сказал что у меня есть
фиолетовый квадрат, и нужно превратить его в синий треугольник
и я пытался взять кисточку, макнуть в банку и поводить ей по квадрату
но почему то кисточка не принимала цвет краски в банке,
то на мой вопрос — где взять правильные банки мне бы ответили гораздо быстрее
предложив её открыть, а не тратить еще стольник на жестянку.
Поэтому с тех пор я строю свои вопросы по проверенной давным давно схеме:
Что есть
Что нужно получить
Как я пытался
Почему или что у меня не получилось.
На последок как оно происходит на форумах
Новичок: Подскажите пожалуста самый крепкий сорт дерева! Весь инет перерыл, поиском пользовался!
Старожил: Объясни, зачем тебе понадобилось дерево? Сейчас оно в строительстве практически не используется.
Новичок: Я небоскрёб собираюсь строить. Хочу узнать, из какого дерева делать перекрытия между этажами!
Старожил: Какое дерево? Ты вообще соображаешь, что говоришь?
Новичок: Чем мне нравиться этот форум — из двух ответов ниодного конкретного. Одни вопросы неподелу!
Старожил: Не нравится — тебя здесь никто не держит. Но если ты не соображаешь, что из дерева небоскрёбы не строят, то лучше бы тебе сначала школу закончить.
Новичок: Не знаите — лучше молчите! У меня дедушка в деревянном доме живёт! У НЕГО НИЧЕГО НЕ ЛОМАЕТСЯ.
Но у него дом из сосны, а я понимаю, что для небоскрёба нужно дерево прочнее! Поэтому и спрашиваю. А от вас нормального ответа недождёшся.
Прохожий: Самое крепкое дерево — дуб. Вот тебе технология вымачивания дуба в солёной воде, она придаёт дубу особую прочность:
Новичок: Спасибо, братан! То что нужно.
Отредактировано модератором: Uchkuma, 26 Апреля, 2011 — 10:21:12
Источник
Переход через header не работает
Здравствуйте! Такая проблема не работают переходы через header, сам код работает, выдает ошибки и регистрирует.
Текст ошибки: Warning: Cannot modify header information — headers already sent by (output started at E:\Programmes\OpenServer\OSPanel\domains\Registr\views\layouts\header.php:1) in E:\Programmes\OpenServer\OSPanel\domains\Registr\scripts\registration.php on line 85
Сам код: registration.php
2 ответа 2
Проверьте как вы сохранили файл. Если в кодировке utf-8 c BOM, то пересохраните без него. Так же посмотрите, чтобы небыло пустых символов перед тегом
Проблема решилась изменением параметра output_buffering = 0 на output_buffering = 4096 в файле php.ini . После измениения не забудьте перезагрузить сервер!
Всё ещё ищете ответ? Посмотрите другие вопросы с метками php javascript html или задайте свой вопрос.
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.10.18.40485
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Источник
Cannot modify header information — headers already sent by
Не сохраняются куки. Что не так.
Warning: Cannot modify header information — headers already sent by (output started at blocksSite/main_noauth.php:4) in blocksSite/main_noauth.php on line 58
3 ответа 3
Общение WEB-сервера с клиентом в данном случае происходит по протоколу HTTP. HTTP включает в себя HTTP заголовки и тело ответа. При этом заголовки обязательно следуют перед телом ответа – того требует стандарт.
PHP же в свою очередь в процессе работы должен сформировать и заголовки и тело ответа. Даже если Вы не задаете ни одного заголовка, то PHP сам устанавливает все необходимые заголовки для ответа клиенту. При этом данные, которые необходимо отдать клиенту он записывает сначала в буфер, но если он начал писать в буфер тело ответа, то заголовки он уже никак не может туда записать и встретив попытку записи заголовков ответа уже после того, как начало формироваться тело ответа PHP выдает ошибку:
Это может быть следствием следующих причин:
Перед установкой заголовков был вывод тела ответа. При этом вывод может быть осуществлен как средствами шаблонизатора, так и через функции echo или print
Вы можете банально ошибиться и поставить перед пробелы или переносы строк, которые тоже будут восприняты как тело ответа.
Ровно так же как и в пункте 2, но в конце php-файла:
Файл incrementX.php
Файл index.php
Файлы, которые содержат PHP-код должны быть сохранены без BOM. Как сохранить файл без BOM.
Не забывайте, что если Вы подключаете файлы через include или require, то файлы к которым обращаются эти функции также могут содержать одну из трех вышеперечисленных проблем.
Если настроен вывод ошибок в браузер, то warning тоже будет телом ответа:
Самым правильным решением большинства проблем с выводом заголовков является изменение структуры РНР файла таким образом, чтобы весь вывод начинался только после того, как отработала основная логика скрипта.
Если же приходится работать с устаревшим кодом где всё вперемешку, можно воспользоваться буферизацией вывода явным образом:
Источник
php Почему не работает редирект Warning: Cannot modify header information — headers already sent by. Ошибка Решение
Primary tabs
Forums:
Описание частной проблемы
После нажатия на кнопку выводится ошибка:
Код аналогичен приведённому в данной теме:
Когда это бывает
Ошибка (предупреждение) типа:
Warning: Cannot modify header information — headers already sent by
Возникает, если вы уже сделали что-то что требует установки заголовков браузера, а теперь хотите переписать их новыми. Например, если вы уже вывели текст — то php выставляет заголовки (в частности заголовок Location — которые показывает оставаться ли на запрошенной странице или же нужно нужно перейти на другую страницу и уже там получить ответ на запрос), чтобы показаться браузеру клиента (в своём ответе) как себя вести.
Корень проблемы
Помните, что функцию header() можно вызывать только если клиенту еще не передавались данные. То есть она должна идти первой в выводе, перед ее вызовом не должно быть никаких HTML тэгов, пустых строк и т.п. Довольно часто возникает ошибка, когда при чтении кода файловыми функциями, вроде include или require, в этом коде попадаются пробелы или пустые строки, которые выводятся до вызова header(). Те же проблемы могут возникать и при использовании одиночного PHP/HTML файла.
— то есть необходимо избавить скрипт-обработчик от html — ведь он по сути сам ничего не выводит а просто перебрасывает на другой адрес — это первое.
Далее, на самом деле заголовок Location следует менять так:
Эксперимент
Так как echo() вообще-то пишет в тело http ответа, а не в заголовки, а header возвращается void (то есть не возвращает значений), о чём было сказано выше, то смысла в использовании echo() нет, но
— тем не менее, предлагаю провести эксперимент:
- уберите html
- не убирайте echo
— так как header() вызывается у вас по сути до echo() (так как header() является аргументом echo()) а значит возврат — заодно проверим если функция возвращает null — будет ли это интерпретироваться как пустая строка или же (что вернее) echo даже не начнёт работать как уже произойдёт редирект.
Ещё раз уточним причину
Т.е. перед вызовом header() не должен выводиться никакой контент ( о чем написано к описанию функции: http://php.net/manual/ru/function.header. )
- 1) ни с помощью echo
- 2) ни с помощью обычного вываливания в браузер html-текста.
В нашем случае судя по всему echo не влияет ни на что, а вот html в обработчике очень даже влияет.
Key Words for FKN + antitotal forum (CS VSU):
Thu, 05/04/2017 — 14:00
вопрос решился
По Вашему совету были удалены теги HTML. Теперь переадресация происходит корректно, скрипт-обработчик выглядит так:
Функция echo действительно не влияет на работу, т.е . можно оставить и как у С. Хольцнера:
Также при оформлении кода для редиректа следует обратить внимание на расширение файла, на который производится переход: при предложенном синтаксисе, оно должно быть указано в аргументе header.
Thu, 05/04/2017 — 14:21
Но можно заставить работать и
Но можно заставить работать и предыдущий обработчик
если выставить в файле php.ini опцию
Thu, 05/04/2017 — 14:32
насчёт буферизации
По — умолчанию никакой буферизации вывода нет ( если, конечно вы не нашаманили в файле php.ini и не присвоили директиве output_buffering значение On ) и PHP отсылает данные юзеру, сразу, как только они готовы. Согласно протоколу HTTP, сервер в ответ на запрос пользователя, должен сначала отправить ему служебные заголовки, а уже после, тело страницы. А тут внезапно, в коде вы опять пытаетесь заставить его отправить HTTP — заголовки, вызывая, скажем функцию session_start() — после удачной авторизации. Ясен пень — повторная отправка заголовков запрещена, HTTP — протокол так не работает! Но что ж делать то? Если после вывода на странице, нужно ещё и сессию стартануть и кУку поставить? — Вспоминаем про буферизацию вывода.
— то есть когда выставлен ненулевой размер буфера, то пока он не заполнится ещё есть возможность манипулировать заголовками. При нулевом же размере буфера, после вывода контента, его отдача сразу же предваряется передачей клиенту заголовков http-ответа.
И получается, что мы хотим изменить заголовки, которые уже «улетели» по сети клиенту (а значит, исправить их уже невозможно — в частности заголовок Location, который указывает оставаться ли на запрошенной странице, или запросить другую — ответ скрипта-«перенаправителя» (у нас это обработчик формы) как раз говорит о том, что надо запросить другую страницу), о чем php нас и предупреждает.
Но: решать проблему таким способом конечно нельзя (не сильно корректно, точнее).
_____________
матфак вгу и остальная классика =)
Источник
Что означает предупреждение «headers already sent»
Этим запросом в первой строке браузер указывает, что хочет просто получить страницу (GET), указывает адрес страницы и версию протокола (сейчас используются только две версии — 1.0 и 1.1. версия 0.9 устарела и сейчас не используется).
Так же обязательным является параметр Host. Т.к. на каждом сервере может быть несколько разных сайтов, то мы должны указать, к какому именно сайту мы хотим обратиться.
Остальные параметры необязательны. ими браузер просто рассказывает о себе (User-Agent) и рассказывает серверу, как он хочет общаться. Но сейчас речь не об этом.
В ответ на этот запрос веб-сервер запускает выполнение нашего php-скрипта, к которому обращается браузер. И веб-сервер отправляет браузеру результат работы скрипта. но перед этим он отправит свои заголовки ответа.
Как вы видите, заголовки идут вначале, а после одной пустой строки начинается тело самого html, который мы генерируем с помощью php-скрипта.
И вот мы подошли к основной сути. когда PHP приказывает веб-серверу начать отправлять само содержимое брузеру, то веб-серверу не остаётся ничего, кроме как отправить вначале все заголовки, которые имеются у него на текущий момент. Поэтому после этого PHP уже не сможет изменить эти заголовки.
Функция header() изменяет любой заголовок. Функция setcookie() добавляет куки к заголовку Set-Cookie, поэтому тоже не может работать после отправки заголовков. session_start() добавляет куки с идентификатором сессии (как в примере выше).
А пока найдём пути решения этой проблемы. Чаще всего такие ситуации происходят из-за использования BOM. BOM — это 2 или 3 невидимых символа в начале файла. Эти символы указывают на то, какая используется кодировка. Многие текстовые редакторы по умолчанию добавляют BOM ко всем файлам юникодовской кодировкой (например UTF-8). Например, создадим в блокноте файл
Именно эти символы и создают проблему. Ведь PHP исполняет свой код только внутри тегов . всё что снаружи отправляется браузеру как есть. Получается, что эти 3 байта сразу же отправятся к браузеру ещё до начала интерпретации PHP-кода. Хотя, по умолчанию в php.ini включен output_buffering и установлен в значение 4096. поэтому проблемы с BOM не должно быть. однако, у многих пользователей она почему-то есть. Подозреваю, что это следствие использования разных кривых сборок.
Я вижу 2 пути решения это проблемы:
1. Включить в php.ini
На вашем компьютере это должно помочь. Но если вы позже закачаете свой сайт на хостинг, то у вас не будет уверенности, что там включен этот буфер.
2. Запретить текстовому редактору сохранять BOM. Но тут уже всё зависит от возможностей текстового редактора, который вы используете. Например, я пользуюсь Notepad++. там можно открыть меню «Кодировки» и выбрать «Преобразовать в UTF-8 без BOM».
Если вы уверены, что BOM не используется, значит где-то перед функциями header(), setcookie() и т.п. вы сами отправляете данные пользователю. Возможно, перед открытием тега 57
Источник