2010-01-12 6 views
0

я строить свои сайты на локальном хосте (работает WAMP на окнах), и когда я загрузить его на моем сервере, я всегда получаю «Не удается изменить информацию в заголовке - заголовки уже прислал»Как отключить сообщение «уже отправлено» на linux, cpanel?

Я понимаю, что там не должно будь то пустые строки и все, и обычно это получается. но теперь мне нужно перенаправить кого-то после отправки заголовка, как я могу заставить свой сервер действовать как мой localhost?

я использую CPanel и WHM:

CPanel 11.25.0-R42399 - WHM 11.25.0 - X 3,9 CENTOS 5,4 x86_64 Virtuozzo на VPS

Я буду признателен за любую помощь

ответ

0

Ну, Я думаю, что, больше думая и улучшая программирование, вы можете сохранить все переадресации до того, как будет написан любой HTML-код.

Эта проблема решается по старым правилам ...

2

Короче говоря, вы должны предотвратить PHP от вывода чего-либо в браузере, прежде чем попасть в точку, где вы хотите использовать функцию заголовка().

Это должно быть сделано с помощью тщательной практики программирования, из которых ваши «нет пустых строк» ​​- это один, или, сохраняя вывод PHP в выходном буфере, и выводятся только тогда, когда вы к этому готовы.

См. Методы ob_start() и ob_flush(). Вы используете ob_start() в начале вашего приложения. Это отключает вывод и сохраняет его в буфер. Когда вы будете готовы начать вывод, используйте ob_flush(), и PHP отправит содержимое буфера в браузер, включая заголовки, которые установлены до этой точки. Если вы не вызываете ob_flush(), тогда буфер выводится (краснеть) в конце скрипта.

Причина, по которой она работает в вашей среде разработки WAMP, скорее всего, что буферизация вывода уже включена по умолчанию в php.ini. Довольно часто эти пакеты «все-в-одном» позволяют использовать буфер по умолчанию для первых 4k байтов или около того. Тем не менее, как правило, лучше явно запускать и очищать буфер в коде, так как это улучшает методы кодирования.

+0

ob_start не хранит заголовки, а только содержимое. –

0

@ user31279: Самый быстрый и грязный способ, которым я знаю, - использовать @ для подавления предупреждения, т.е.

@header('Location: some-other-page.php');