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

Тема в разделе "PHP", создана пользователем Skie, 1 янв 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Skie

    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...

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

    Почему вдруг время стало недопустимо большим?
     
  2. Lime

    Lime Писатель

    Регистр.:
    31 июл 2009
    Сообщения:
    3
    Симпатии:
    1
    Баг php, пофиксен в 5.2.12 и 5.3.1. Просто обновись ;)
     
  3. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    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 нравится это.
  4. Skie

    Skie Постоялец

    Регистр.:
    17 мар 2008
    Сообщения:
    110
    Симпатии:
    23
    Огромное спасибо, ошибка пропала.
    Насколько я понял, надо было заменить умножение на сложение в выражении
    time()+60*60*24*30
    Я в этом ничего не понимаю, но на всякий случай задам вопрос.
    Не пропущены ли там скобки? м.б. надо вот так:
    (time()+60)*60*24*30

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

    Вдруг от этого какая-нибудь внутренняя логика процессов зависит, синтаксическая ошибка пропала, а возможно возникла логическая...
     
  5. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    нет, не пропущены
    почему ж нельзя.очень даже можно
    Расмотрим что делает данная конструкция
    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 нравится это.
  6. Skie

    Skie Постоялец

    Регистр.:
    17 мар 2008
    Сообщения:
    110
    Симпатии:
    23
    Спасибо за ликбез.
    Получается что в старом варианте кука жила до 9999 какого-то года и это вполне справедливо не нравилось интерпретатору.
     
Статус темы:
Закрыта.