Setcookie не работает
Добрый день! Вот решил поделиться своим открытием насчёт функции Setcookie в PHP. При генерации страницы мне нужно чтобы у клиента установился определённое значение в cookie. Поковырявшись с Setcookie и убедившись что оно не работает, я обычно бросал это неблагодарное дело и пользовался JavaScript`ом, однако если у клиента отключены скрипты, то такой фокус не прокатит. Так почему же Setcookie не работает?
В основном это две причины: очевидная и не очень.
Очевидная причина:
Как пишут нам в инструкции cookie должны передаваться до того как будут выведены какие-либо другие данные скрипта (это ограничение протокола). Это значит, что в скрипте вызовы этой функции должны располагаться прежде остального вывода, включая вывод тэгов <html> и <head>, а также пустые строки и пробельные символы.
Да, это очень важное замечание, поскольку, проигнорировав его, вы получите сообщение об ошибке следующего содержания: Cannot modify header information — headers already sent by (output started at… Типа невозможно изменить заголовки страницы, так как они уже были отправлены.
В той же инструкции приведён пример использования функции Setcookie на PHP:
<?php $value = 'что-то где-то'; setcookie("TestCookie", $value); setcookie("TestCookie", $value, time()+3600); /* срок действия 1 час */ setcookie("TestCookie", $value, time()+3600, "/~rasmus/", "example.com", 1); ?>
Однако, выполнение такого php-скрипта на сервере — привело к ошибкам:
Warning: Cannot modify header information — headers already sent by (output started at Z:\…\test.php:1) in Z:\…\test.php on line 4
Warning: Cannot modify header information — headers already sent by (output started at Z:\…\test.php:1) in Z:\…\test.php on line 5
Warning: Cannot modify header information — headers already sent by (output started at Z:\…\test.php:1) in Z:\…\test.php on line 6
Как же так??? Ведь это пример с официального сайта! Вот тут-то виновата вторая — не очевидная причина.
Не очевидная причина:
Очень просто — кодировка php-файла должна быть UTF-8 без BOM