Expiry date cannot have a year greater then 9999 - что это?

Статус
В этой теме нельзя размещать новые ответы.

Skie

Постоялец
Регистрация
17 Мар 2008
Сообщения
110
Реакции
23
Вот, начала выскакивать такая фигня :nezn:

Expiry date cannot have a year greater then 9999

В строке на которую указывает ошибка судя по всему запись (или формирование) кукисов.

PHP:
function getUID() {
		if (isset($_COOKIE['buid'])) {$buid=$_COOKIE['buid'];}
		else{$buid=uniqid(md5(rand())); setcookie("buid",$buid,time()*60*60*24*30); $_COOKIE['buid']=$buid;}
		return $buid;
	}
Ошибка в строке else...

Раньше всё было нормально, сообщение об ошибке появилось наверное пару недель назад, в остальном страницы отображаются правильно.

Почему вдруг время стало недопустимо большим?
 
Баг php, пофиксен в 5.2.12 и 5.3.1. Просто обновись ;)
 
Lime, ты бы хоть код глянул.
в нем достаточно ткрупная ошибка
Skie, меняешь код на
PHP:
function getUID() {
        if (isset($_COOKIE['buid'])) {$buid=$_COOKIE['buid'];}
        else{$buid=uniqid(md5(rand())); setcookie("buid",$buid,time()+60*60*24*30/*умножение заменил на сложение.теперь куки живут месяц а не до  "year greater then 9999"*/); $_COOKIE['buid']=$buid;}
        return $buid;
    }
 
  • Нравится
Реакции: Skie
Lime, ты бы хоть код глянул.
в нем достаточно ткрупная ошибка
Skie, меняешь код на
PHP:
function getUID() {
        if (isset($_COOKIE['buid'])) {$buid=$_COOKIE['buid'];}
        else{$buid=uniqid(md5(rand())); setcookie("buid",$buid,time()+60*60*24*30); $_COOKIE['buid']=$buid;}
        return $buid;
    }
Огромное спасибо, ошибка пропала.
Насколько я понял, надо было заменить умножение на сложение в выражении
time()+60*60*24*30
Я в этом ничего не понимаю, но на всякий случай задам вопрос.
Не пропущены ли там скобки? м.б. надо вот так:
(time()+60)*60*24*30

Просто иначе не понятно почему нельзя просто написать
time()+2592000 это то же самое что: time()+60*60*24*30
Поскольку: 60*60*24*30=2592000

Вдруг от этого какая-нибудь внутренняя логика процессов зависит, синтаксическая ошибка пропала, а возможно возникла логическая...
 
Не пропущены ли там скобки? м.б. надо вот так:
(time()+60)*60*24*30
нет, не пропущены
Просто иначе не понятно почему нельзя просто написать
time()+2592000 это то же самое что: time()+60*60*24*30
Поскольку: 60*60*24*30=2592000
Вдруг от этого какая-нибудь внутренняя логика процессов зависит, синтаксическая ошибка пропала, а возможно возникла логическая...
почему ж нельзя.очень даже можно
Расмотрим что делает данная конструкция
PHP:
setcookie("buid",$buid,time()+60*60*24*30);
она создает куку с именем buid, содержащую значение переменной $build, и которая умрет в момент времени time()+60*60*24*30
с последним пунктом подробнее:
время жизни куки задается в виде timestamp(количество секунд прошедших с The Unix Epoch, 1 января 1970, 00:00:00 GMT)
в данном случае мы берем текущее время- time() и прибавляем к нему число 60*60*24*30, что означает что кука умрет через 60*60*24*30 секунд, начиная с данного момента.
данное число именно в таком виде очевидно соответствует 60(секунд)*60(минут)*24(часа)*30(дней)=30 дней
когда же мы встретим в коде число 2592000, то какому временному промежутку оно соответствует, так сразу и не скажешь, без калькулятора.
поэтому способ записи через умножение является в данном случае предпочтительным, в целях удобства сопровождения кода
 
  • Нравится
Реакции: Skie
Спасибо за ликбез.
Получается что в старом варианте кука жила до 9999 какого-то года и это вполне справедливо не нравилось интерпретатору.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху