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

    +163

    1. 1
    eval (' ?' . '>' . $tpl->result['main'] . '<' . '?php ');

    > Итак нередко возникает необходимость вставки на свой сайт PHP скрипт стороннего производителя. Однако по умолчанию данная возможность отключена в скрипте. Поэтому предлагаем вам небольшой хак, позволяющий использовать любой PHP код в шаблонах
    >
    > Откройте файл index.php найдите строчку:
    > echo $tpl->result['main'];
    >
    > и замените ее на
    > eval (' ?' . '>' . $tpl->result['main'] . '<' . '?php ');
    >
    > Все, вы можете использовать сторонние скрипты на вашем сайте. Данных хак не рекомендуется к использованию на версиях ниже 3.0

    "... небольшой хак ..."
    Ага, небольшой. Нету просто слов... DLE.

    "Данных хак не рекомендуется к использованию на версиях ниже 3.0"
    Я бы вообще его не рекомендовал бы даже.

    http://dle-news.ru/tips/33-ispolzovanie_ljubykh_php_vstavok_v_shabl onakh.html

    P.S.: знаю что 2006, но все равно можно было и получше написать.

    Запостил: volter9, 21 Сентября 2014

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

    • И к стати, зачем "<" . "?" и "<" . "?php"? Микроптимизация? Магия? Идиотизм?
      Ответить
      • eval оборачивает код в <?php ?>, так что получается <?php код ?>
        Упомянутый же фрагмент закрывает эти неявные теги, так что получается
        <?php ?>код<?php ?>

        Т. е. код будет исполняться не как PHP, а как HTML с возможностью вставки внутрь PHP-фрагментов.

        Благодаря такой обёртке $tpl->result['main'] теперь может содержать не только чистый HTML-код, но и PHP-вставки.

        А для чего понадобилось разбивать константу '<?php ' на '<' и '?php ', не знаю. По идее интерпретатор не должен никак реагировать на теги внутри строковых констант.
        Ответить
        • Ну это я понял, меня именно интересовало вот такая магия "микроптимизация": "<" . "?php".

          Почему бы не написать просто "<?php" ?
          Ответить
          • явсегдабудучитатьтопикдоконцаявсегдабуду читатьтопикдоконцаявсегдабудучитатьтопик доконцаявсегдабудучитатьтопикдоконца
            Ответить
    • Аналогичный код в Smarty:
      eval("?>" . $content);
      Ответить
      • А в Twig'е такое есть? )
        Ответить
        • В нём скучно: так же, как в Smarty.
          Ответить
          • твиг же типо с пытхоновоского слизан - типо ж труЪ
            че удобней-то есть? хамл?
            Ответить
            • Я имел в виду, что скучно, потому что вот таких цепочек в исходнике нет: ' ?' . '>'.
              Ответить
        • ясен пень - есть.

          Прям в Twig_Environment::loadTemplate()

          причем в виме эта штука всю подсветку рушит, а как в топике
          eval (' ?' . '>'... все ок
          Ответить
          • Так это всё ради подсветки в редакторе?
            Ответить
            • ну да!
              Ответить
            • еще и xml-ный <?xml ... тоже порушит подсветку - поэтому тоже пишут '<' . '?' . '...
              Ответить
              • > порушит подсветку
                Нет чтобы подсветку пофиксить, так они код портят...
                Ответить
                • Это ещё мелочи по сравнению с известными исходниками Windows NT 4.0 + Windows 2000, где в коде одной библиотеки был комментарий, что пришлось применить хак, потому что люди нетрадиционной ориентации, написавшие Эксель, забывают убирать говно очищать память. Вместо того, чтобы исправлять ошибки в Экселе, они в операционке под него подставляют костыли, чтобы он хоть как-то запускался...
                  Ответить
                  • Е**нный в рот маленький экран, прошу прошение, это я по ошибке на минус нажал :(
                    Беру минус(ы) на себя если что.
                    Ответить
                    • Пустяки. Дела-то житейские.

                      Главное, чтобы не минус 5 сразу, потому что тогда комментарий превратится в кат.
                      Ответить
                      • Это да. А без мобильной версии не так удобно плюсовать как на десктопе.
                        Ответить
                      • За это я вам картинку сделал )
                        http://imgur.com/gFYMr0F.png
                        Ответить
    • Знаю что некропостю, но нашел еще одну причину '<' . '?php':
      http://php.net/manual/ru/language.basic-syntax.phpmode.php#92643
      Ответить

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