1. PHP / Говнокод #8794

    +159

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    // Strip out the embedded timestamp
    if ( ! preg_match("/(\d+TS--->)/", $cache, $match))
    {
      return FALSE;
    }
    
    // Has the file expired? If so we'll delete it.
    if (time() >= trim(str_replace('TS--->', '', $match['1'])))
    {
    ...

    CodeIgniter → System → Core → Output.php
    Это чтение временной метки в кэш-файле. Почему бы в регулярке в "карман" не взять только \d+?

    Запостил: Andretti, 10 Декабря 2011

    Комментарии (11) RSS

    • скорее вопрос в том, почему не хранить эту метку в более цивилизованном виде, чтобы не парсить содержимое регулярками
      Ответить
      • json? нет не слышал
        Ответить
        • Городить json для этих целей, на мой взгляд, тоже не лучший вариант, если там будет храниться фактически 2 поля - временная метка (размер - 10 байт) и контент (100500 байт).
          Лучше хранить отдельно контент и отдельно правила кэширования.
          Ответить
          • да господи, просто читаем первые 10 байт из файла. и записываем соот-но тоже туда же
            Ответить
            • Там что, время в контент файла сохраняется?
              там нет проверки по дате изменения файла?
              Ответить
              • видимо нет
                Ответить
              • судя по коду, метка указывает на момент устаревания кэша, а не на время создания.
                с другой стороны, ничто не мешает при создании файла кэша установить ему время "на будущее" (и проверять его же), но это уже немного изврат...
                Ответить
    • filemtime, блеать
      Ответить
    • .
      Ответить
      • а вообще странный код кеша :) я даже оправдание найти не могу этому, типа вначале каждого файла есть метка TS---> ?
        Ответить
        • Да, именно так. Но меня больше восхитило как автор вытягивает эту метку из файла. Еще раз хочу отметь, что если бы в "карман" в регулярке бросили только число, то во втором условии отрезать маркер, да еще и trim применять (чтоб наверняка), не было обходимости...
          Ответить

    Добавить комментарий