Совершеннейшая магия творится с функцией php setcookie.
Сразу ДИСКЛЕЙМЕР: я прекрасно знаю два главных подвоха этой функции: задания области видимости куки и установка куки до отправки данных клиенту. Это я все учитываю и много лет проблем с setcookie у меня не возникало.
Но функция вдруг не просто перестала работать. Она стала работать ПО НАСТРОЕНИЮ.
Что я имею в виду? Сначала проблему можно было решить, если задать куку ДО включения стороннего файла php.
То есть если в коде:
Вот эти две строки поменять местами, то кука начнет работать.
Казалось бы, значит в файле initial.php содержится какая-то проблема.
Чтобы ее выявить, я начал расставлять строку
setcookie('test',$num,strtotime("+1 days"),'/');
в разных местах внутри этого файла.
И действительно, если поставить команду setcookie в начало файла initial.php, то кука исправно запишется.
Если поставить команду в середину файла - опять все хорошо!
Но даже если поставить команду setcookie в самый конец файла:
setcookie('test',$num,strtotime("+1 days"),'/');
?>
Она все равно сработает! Но стоит ее вытащить из файла и разместить в исходном файле после команды include_once('klass/initial.php'); - то все! Паночка померла! То есть проблема возникает ровно на выходе из включенного файла!
Причем если вместо файла initial.php включить пустой файл initial2.php:
include_once('klass/initial2.php');
setcookie('test',$num,strtotime("+1 days"),'/');
То функция сработает! То есть она не работает именно после чего-то, что находится в файле initial.php.
НО ЭТО НЕ САМОЕ ПОТРЯСАЮЩЕЕ!!!!!
После того, как я выдрал половину волос, я решил проверить: вдруг в файле initial.php содержится какая-то такая штука, которая блокирует функцию setcookie на выходе из файла?
Для этого я включил оба файла. Один спереди сеткуки, другой сзади сеткуки:
И начал постепенно перетаскивать куски когда из initial.php в initial2.php. Мой расчет заключался в том, что когда я перетащу проблемный кусок кода в initial2.php, который находится перед сеткукой, то сеткука перестанет работать.
И вот, значит, перетаскиваю я, перетаскиваю. А сеткука продолжает работать. Ииии... я перетащил все!!!! Все!!!
То есть я перетащил полностью все содержимое initial.php в initial2.php, а кука продолжала работать! Схрена ли?
Но и это не самое потрясающее.
Потом я вернул все как было. То есть я вернул исходный код:
include_once('klass/initial.php');
setcookie('test',$num,strtotime("+1 days"),'/');
А в файл initial.php вернул все, что было до экспериментов.
Иии... кука работает! То я вернул все как было вплоть до последнего символа. И оно работает.
Как? Как это возможно? Я уже начинаю сходить с ума....
Варианта 2: Пробел/перенос строки после ?>, или файл записанный с BOM. Первое лечится удалением лишних символов, второе через редактор кода - файл-кодировка-утф без бом.
Через несколько часов после этого поста куки заработали во всех файлах сайта.
Даже в тех файлах, в которых я не редактировал ни одного бита! (и вложенных в них)
Ненавижу магию, но пока проблема неактуальна.
Хром используете? Возможно проблема была в браузере. Я тоже так бился, только с css файлами, которые обновляться не хотели, все очистил что мог, помог только переход на firefox)
P.S. только сейчас заметил, что проблеме год