Php Headers
Нашел ответ : http://forum.codenet.ru/showthread.php?threadid=4852
Но у меня выводится ошибка :
Warning: Cannot modify header information - headers already sent by (output started at /home/s/snk-ananim.hut1.ru/WWW/index.php:9) in ...
Кто мне поможет ???
Почему всё время приходится нажимать (REFRESH) , иначе выводит старую версию файла !!!
Нашел ответ : http://forum.codenet.ru/showthread.php?threadid=4852
Надо просто послать четыре header'а: для браузера два для прокси и еще какой-то
Но у меня выводится ошибка :
Warning: Cannot modify header information - headers already sent by (output started at /home/s/snk-ananim.hut1.ru/WWW/index.php:9) in ....
Эта ошибка появляется когда вывод уже был сделан
Например:
echo "1";
Header(....); // ошибка сдесь
?>
1
<?
Header(....); // ошибка сдесь 2
?>
Надо так:
<?
Header(....); ?>
1
<?php
ob_start();
ob_flush();
flush(); /* это потому что не всегда просто flush() работает *.
echo "aaa";
flush();
header("Location: aaa");
flush();
ob_end_flush();
?>
з.ы. в принципе вместо всех ob_* достаточно просто flush() если сервак нормально настроен...
а можно вот так вот
<?php
ob_start();
ob_flush();
flush(); /* это потому что не всегда просто flush() работает *.
echo "aaa";
flush();
header("Location: aaa");
flush();
ob_end_flush();
?>
з.ы. в принципе вместо всех ob_* достаточно просто flush() если сервак нормально настроен...
нет , объяснили же , что заголовки ДОЛЖНЫ БЫТЬ ДО ЛЮБОГО ВЫВОДА ИЛИ HTML , а у тебя
...
echo "aaa";
...
header("Location: aaa");
...
Надо просто послать четыре header'а: для браузера два для прокси и еще какой-то
Но у меня выводится ошибка :
Warning: Cannot modify header information - headers already sent by (output started at /home/s/snk-ananim.hut1.ru/WWW/index.php:9) in ....
Эта ошибка появляется когда вывод уже был сделан
Например:
echo "1";
Header(....); // ошибка сдесь
?>
1
<?
Header(....); // ошибка сдесь 2
?>
Нет у меня в скрипте таких ошибок , я до этого не использовал Headers !!!
Может кто знает в чем праблема ????
нет , объяснили же , что заголовки ДОЛЖНЫ БЫТЬ ДО ЛЮБОГО ВЫВОДА ИЛИ HTML , а у тебя
...
echo "aaa";
...
header("Location: aaa");
...
именно для этого все flush() и нужны чтобы заголовки отправлялись в любое время... так что у меня код правильный и работающий...
я сам этим пользуюсь когда сначала ставлю куки, а потом если что, делаю редерикт...
Но у меня выводится ошибка :
Warning: Cannot modify header information - headers already sent by (output started at /home/s/snk-ananim.hut1.ru/WWW/index.php:9) in ....
Нет у меня в скрипте таких ошибок , я до этого не использовал Headers !!!
Может кто знает в чем праблема ????
Тебе же сказали, что подобная ошибка происходит в том случае, если до headers, выводится в браузер любая информация, даже пробел. Так что ищи, где это у тебя происходит.
Но у меня выводится ошибка :
Warning: Cannot modify header information - headers already sent by (output started at /home/s/snk-ananim.hut1.ru/WWW/index.php:9) in ....
Нет у меня в скрипте таких ошибок , я до этого не использовал Headers !!!
Может кто знает в чем праблема ????
Код в студию!
Насчет flush()
Сомневаюсь что это будет работать, т.к flush() отправляет то что ты уже вывел в браузер(очищает буфер)
То же самое будет если ты поменяешь размер буфера(функцию не помню), т.е пока клиент не примет N данных сервер не будет посылать больше
Ananim
Напиши сюда хотя бы начало твоего кода
З.Ы: написано же: Output started in .... ))
Насчет flush()
Сомневаюсь что это будет работать, т.к flush() отправляет то что ты уже вывел в браузер(очищает буфер)
То же самое будет если ты поменяешь размер буфера(функцию не помню), т.е пока клиент не примет N данных сервер не будет посылать больше
не знаю, но у меня работает... сначала посылаются куки, потом скрипт, потом если надо - редерикт.. если без flush() то как раз пишет про хедеры, если с flush() то спокойно переадресовывает...
Может у тебя в Apache библиотекарь стоит, который что-то выводит
у меня сайт на Agave .
нет нету у меня в скрипте не include() , не require()
Напиши сюда хотя бы начало твоего кода
Ok , сразу предупреждаю код у меня очень страшный т.к. я молодой человек 16-и лет и только недавно сел за компьютер !!!
<body background="images/canpaper.gif" text="black" link="green" alink="black" vlink="red" topmargin="0" leftmargin="0">
<table align="center" width="100%" border="0" cellpading="0" cellpacing="0">
<tr>
<td width="5" background="images/obr.bmp">
</td>
<td valign="top" width="175">
<table border="0" cellpadding="0" cellspacing="0" valign="top">
<tr>
<td width="175" valign="top">
<center></center>
<center></center>
<center></center>
<center></center>
<center></center>
<center></center>
<center></center>
<center></center>
<center></center>
</td>
</tr>
Вот !
вопрос, и куда в этом файле ты пихешь те хедеры?? я что-но здесь не нашёл :o
сразу после кода идет Head и в самом начале !
Я подумал если Output started in .... , то я засунул этот headers в самое начало кода и теперь страница вообще не открывается :( .
Может есть какие-нибудь функции для этого , кроме Headers ??
Кто-нить помогите plzzzzzzzz
Не поверю чтоб некто незнал как избавиться от моей проблемы ! Заходя на любой сайт , браузер каждый раз читает новую версию файла , а у меня на сайте нет !
Может есть какие-нибудь функции для этого , кроме Headers ??
Кто-нить помогите plzzzzzzzz
(извеняюсь заранее) твою мать ... где там хоть кусок РНР кода ???
делай так
<?php
header("Expires: Mon, 26 Jul 1997 00:00:00 GMT");
header("Cashe-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
?>
<title>Ananim ©</title>
<body background="images/canpaper.gif" text="black" link="green" alink="black" vlink="red" topmargin="0" leftmargin="0">
<table align="center" width="100%" border="0" cellpading="0" cellpacing="0">
<tr>
<td width="5" background="images/obr.bmp">
</td>
<td valign="top" width="175">
<table border="0" cellpadding="0" cellspacing="0" valign="top">
<tr>
<td width="175" valign="top">
...............
Не поверю чтоб некто незнал как избавиться от моей проблемы ! Заходя на любой сайт , браузер каждый раз читает новую версию файла , а у меня на сайте нет !
Может есть какие-нибудь функции для этого , кроме Headers ??
Кто-нить помогите plzzzzzzzz
Блин ну ты даешь? Например, прочитав твой вопрос, у меня была полная уверенность, что дело будет касаться php. А код, который ты привел, полностью хтмлшэный. Ты, скорее всего, не до конца понял, того, что тебе здесь объясняли. Если ты в файле, хоть что-то уже выводил, любой символ, любой html тэг, то хедеры уже не отошлются. Так что если тот код, который ты привел, стоит перед php кодом, то у тебя ничего не выйдет.
делай так
<?php
header("Expires: Mon, 26 Jul 1997 00:00:00 GMT");
header("Cashe-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
?>
<title>Ananim ©</title>
<body background="images/canpaper.gif" text="black" link="green" alink="black" vlink="red" topmargin="0" leftmargin="0">
<table align="center" width="100%" border="0" cellpading="0" cellpacing="0">
<tr>
<td width="5" background="images/obr.bmp">
</td>
<td valign="top" width="175">
<table border="0" cellpadding="0" cellspacing="0" valign="top">
<tr>
<td width="175" valign="top">
...............
Работает спасибо , но пробавал делать также только хедеры вставлял со страницы http://forum.codenet.ru/showthread.php?threadid=4852 и выходила ошибка "500" !
header("Expires: Mon, 26 Jul 1997 00:00:00 GMT");
header("Cashe-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
от
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
это мне посоветовали на другом форуме !
Эти два кода действуют одинакого ???
Droont , а чем отличается
от
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
это мне посоветовали на другом форуме !
Эти два кода действуют одинакого ???
второй код просто с пхп-шного мануала...
PHP scripts often generate dynamic content that must not be cached by the client browser or any proxy caches between the server and the client browser. Many proxies and clients can be forced to disable caching with:
и этот код...
первый код просто немного обрубленный, но в общем случае его достаточно...
з.ы. я так и не понял, куда ты сам пихал эти хедеры когда они не работали...
Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.
<?php
/* This will give an error. Note the output
* above, which is before the header() call */
header('Location: http://www.example.com/');
?>
Note: As of PHP 4, you can use output buffering to get around this problem, with the overhead of all of your output to the browser being buffered in the server until you send it. You can do this by calling ob_start() and ob_end_flush() in your script, or setting the output_buffering configuration directive on in your php.ini or server configuration files.
и код с flush() который я выше приводил будет работать...
и ещё, насчёт flush()
и код с flush() который я выше приводил будет работать...
А если я сначала отправлю браузеру половину картинки JPG с
Header("Content-type: image-x-jpg"); // вроде так
а потом сделаю flush() и пошлю вторую половину картинки с
Header("Content-type: image-x-png")
И что браузер будет делать? ))
Насчет 2-х вариантов Header'ов:
Второй вариант похоже ПОЛНОСТЬЮ отключает кэширование страницы
Но лучше будет юзать эти ОБА варианта ))
А если я сначала отправлю браузеру половину картинки JPG с
Header("Content-type: image-x-jpg"); // вроде так
а потом сделаю flush() и пошлю вторую половину картинки с
Header("Content-type: image-x-png")
И что браузер будет делать? ))
Насчет 2-х вариантов Header'ов:
Второй вариант похоже ПОЛНОСТЬЮ отключает кэширование страницы
Но лучше будет юзать эти ОБА варианта ))
в твоём коде передасться второй хедер, а при Header("Content-type: image-x-png", false);
и если ты сначала в коде поставишь ob_start() а потом в конце ob_end_flush() то по идее хедера будет оба.. а что сделает браузер уже только ему виднее)))
з.ы. я тут понял, что сам по себе flush() особой роли не играет.. играют роль ob_start() и ob_end_flush()
з.ы. я так и не понял, куда ты сам пихал эти хедеры когда они не работали...
Кажись я уже писал !
сразу после кода идет Head и в самом начале !