Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Необходима помощь с куки
 
 автор: 27   (24.09.2005 в 10:06)   письмо автору
 
 

Вот функция установки куки:

 function setallcookie($login, $password)
 {
  $tmppos = strrpos($_SERVER['PHP_SELF'],"/") + 1;
  $path = substr($_SERVER['PHP_SELF'], 0, $tmppos);
  setcookie("login", $login, time() + 3600*24*5,$path);
  setcookie("Password", $password, time() + 3600*24*5,$path);
  setcookie("forum", "MyForum", time() + 3600*24*5,$path);
 }


Вот вызов функции:


setallcookie($login, $password);


А вот ошибки которые выводятся:


Warning: Cannot modify header information - headers already sent by (output started at z:\home\test1.ru\www\system\reg.php:80) in z:\home\test1.ru\www\system\utils\functions.php on line 6

Warning: Cannot modify header information - headers already sent by (output started at z:\home\test1.ru\www\system\reg.php:80) in z:\home\test1.ru\www\system\utils\functions.php on line 7

Warning: Cannot modify header information - headers already sent by (output started at z:\home\test1.ru\www\system\reg.php:80) in z:\home\test1.ru\www\system\utils\functions.php on line 8


Примечание:
Данные $login и $password передаются параметром POST.
Куки не устанавлюются. Сами куки включены!

   
 
 автор: 10100100   (24.09.2005 в 10:48)   письмо автору
 
   для: 27   (24.09.2005 в 10:06)
 

попробуй заменить

setallcookie($login, $password);

на
$_cookie(login, password);

   
 
 автор: cheops   (24.09.2005 в 11:52)   письмо автору
 
   для: 27   (24.09.2005 в 10:06)
 

Куки, сессии, отправка заголовков должны происходить до отправки любой информации в окно браузера, т.е. до любого вывода echo, print или непосредственного вывода вне тэгов <?php и ?>. Это связано с тем, что HTTP-заголовки передаются перед всеми данными и когда происходит вывод в окно браузера PHP вынужден их пред этим отослать клиенту. Поэтому повторно, после вывода информации в браузер он не может работать с куками, сессиями и отправлять заголовки.
Если вывод текста до отправки заголовков необходим следует воспользоваться функциями управления вывода, позволяющих задерживать вывод информации в браузер.

http://www.softtime.ru/forum/ead.php?id_forum=1&id_theme=147
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=148

http://www.softtime.ru/group/id_group=12

   
 
 автор: 10100100   (24.09.2005 в 12:00)   письмо автору
 
   для: cheops   (24.09.2005 в 11:52)
 

это нынче прикол такой в разных постах писать одно и то же? :))))

   
 
 автор: cheops   (24.09.2005 в 12:23)   письмо автору
 
   для: 10100100   (24.09.2005 в 12:00)
 

Нет, это просто два разных вопроса на одну и туже тему :))) я этот пост раз 50-100 запостил :))) Это действительно очень распространённая ошибка - так как вызов функции header() зависит от вывода в окно браузер - это нетипично для языков программирования, поэтому такая ошибка возникает очень часто. Разработчики PHP отказались от буфферизации вывода, поэтому его необходимо организовывать вручную. Без буфферизации любой вывод в окно браузера по протоколу означает, что передача HTTP-заголовков закончилась и больше они посылаться не будут. Поэтому если хоть один байт отсылается в браузер, ни header(), ни setcookie(), ни session_start() не смогут выполнить свою работу - так как все они работают на отправке HTTP-заголовков, которые просто обязаны быть отправлены до тела документа.

   
 
 автор: 27   (24.09.2005 в 14:00)   письмо автору
 
   для: cheops   (24.09.2005 в 11:52)
 

С установкой всё нормально!
Вот следущее:

 if(!empty ($_COOKIE['login']))
  {
   $author = $_COOKIE['login'];
  }
 else
  {
   $author = 'Гость';
  }



  echo 'Привет '.$author;


Вот ошибка:
Notice: Undefined index: login in z:\home\test1.ru\www\index.php on line 2

Что тут не так?

   
 
 автор: cheops   (24.09.2005 в 20:43)   письмо автору
 
   для: 27   (24.09.2005 в 14:00)
 

Notice является своеобразным советом и выводится, когда выставлена максимальная чувствительность PHP к ошибкам - её следует понизить, как это сделано на всех хостингах, иначе они не дадут работать. Для этого, следует выставить соответствующее значение для директивы error_reporting http://www.softtime.ru/info/articlephp.php?id_article=23, в конфигурационном файле php.ini
error_reporting = E_ALL & ~E_NOTICE

Так же можно изменить уровень обработки ошибок локально, для этого в начало скрипта следует поместить функцию
<?php 
Error_Reporting
(E_ALL & ~E_NOTICE); 
?>

В качестве параметра, которой передать соответствующий уровень обработки ошибок.

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=4985

   
 
 автор: 27   (25.09.2005 в 15:26)   письмо автору
 
   для: cheops   (24.09.2005 в 20:43)
 

Спасибо я разобрался.... Ошибки были из - за следуещего:
empty я заменил на isset.
Область видимости куки ограничивалась только одной папкой..

   
 
 автор: himic   (25.09.2005 в 16:09)   письмо автору
 
   для: 27   (25.09.2005 в 15:26)
 

Только хотел про isset сказать

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования