За последние 24 часа нас посетили 17045 программистов и 1652 робота. Сейчас ищут 918 программистов ...

Замена eval

Тема в разделе "Прочие вопросы по PHP", создана пользователем splashcoder, 14 апр 2016.

Метки:
  1. splashcoder

    splashcoder Активный пользователь

    С нами с:
    31 дек 2008
    Сообщения:
    14
    Симпатии:
    0
    Есть класс для архивации файлов, в нём конструкция вида
    PHP:
    1. $dtime  = dechex($this->unix2DosTime($time));
    2.         $hexdtime = '\x' . $dtime[6] . $dtime[7]
    3.                   . '\x' . $dtime[4] . $dtime[5]
    4.                   . '\x' . $dtime[2] . $dtime[3]
    5.                   . '\x' . $dtime[0] . $dtime[1];
    6.         eval('$hexdtime = "' . $hexdtime . '";');
    Для чего здесь eval и как можно его заменить?
    Без этой строки архив создаётся, но не открывается.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    он собирает эти коды в байты правильные. Потому что когда ты пишешь так "\xABCD", то пхп их заменяет. А т.к. они уже сидят в переменной и частями - не заменяет. Поэтому такая конструкция. Конечно это бред. =) Но работает.
     
  3. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Прикольный код. Вот его замена.
    PHP:
    1. $dtime = $this->unix2DosTime($time);
    2. $hexdtime = pack("nn", $dtime, $dtime >> 16);
    --- Добавлено ---
    Что бы было понятно о чем речь, стоит прочесть вот эту статью
     
    splashcoder нравится это.
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а что это вообще за коды?
     
  5. splashcoder

    splashcoder Активный пользователь

    С нами с:
    31 дек 2008
    Сообщения:
    14
    Симпатии:
    0
    Респект! Огромное спасибо!!!
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а hex2bin() тут никак нельзя задействовать?
     
  7. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Да можно, придется сначала сделать dec2hex, потом переставлять буковки местами и только потом hex2bin.