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

    +164

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    <?php
     $Options = file("OPTIONS.txt");
     foreach ($Options as $opt)
            {
            $opt = trim($opt);
            eval("$".$opt.";");
            }

    Запостил: qbasic, 28 Февраля 2011

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

    • Загрузка настроек в формате ключ=значение командой
      . somefilerc
      в sh -- вполне обычное явление.
      Ответить
    • Да, интересно, а что было бы быстрей
      1. Исходный вариант
      2.
      foreach($Options as $opt) {
          list($var, $val) = explode('=', $opt);
          $$var = $val;
      }

      3. поменять всё на ini-файлы и делать parse_ini_file()
      Ответить
      • быстрей поменять конфиги с тхт на пхп, в формате
        $key='value';
        Ответить
        • не факт!
          по крайней мере в некоторых ситуациях пхп быстрее разбирает текстовые данные, чем инклудит код.
          Ответить
          • да, наверное разобрать ини менее затратно, чем проинтерпретировать хз какой код
            Ответить
            • я как-то тестировал скорость чтения массива из файла, куда он сохранялся 1) через сериализацию и 2) через вставку в пхп-формате с помощью var_export. 3) 4) - уже не помню.
              чтение сериализованного массива оказалась существенно быстрее, чем чтение "родного" пхп-шного объявления.
              Ответить
              • Проводил такие же тесты, пришёл к тому же результату. Следует заметить, что сериализованные данные руками особо не поредактируешь, в отличие от. По быстродействию есть более-менее компромиссный, хотя и не очень удобный вариант, особенно радующий, если конфиг-файлов несколько: хранить в них данные как угодно плюс приделать кэш с сериализацией. После каждого редактирования конфигов кэш удалять, чтобы обновился.
                Ответить
                • можно и так... хотя и сериализованные данные тоже можно руками спокойно ковырять при некоторой сноровке. :)
                  Ответить
                  • ммм... ну тогда создать спец. редактор. Учитывая то, что конфига правится редко, получаем небольшой выигрыш в производительности )
                    Ответить
                    • Кстати, давно хотелось найти редактор, способный работать с сериализованными данными. Но ничего подходящего не видел, а самому писать - как всегда, лень!
                      Ответить
                      • ну, можно же сделать "минимальный" редактор, который умеет:
                        1. десериализовывать данные (загрузка)
                        2. сериализовывать данные (сохранение)
                        3. давать редактировать десериализованные в виде обычного текста
                        4*. дополнительно можно устроить проверку корректности (что бы в процессе интерпретации конфиги не вылез бы досадный fatal error, сыпащий всю аппликацию)


                        скажем, это текстареа с 2-3 кнопками. На такую часовую работу лень не должна успеть среагировать, особенно, если подключить интерес ))
                        Ответить
                        • неее, это не то!
                          я хочу универсальный редактор, способный работать с любой структурой сериализованных данных - произвольные типы данных, произвольная вложенность и т.п... за час не получится, поэтому и лень.
                          Ответить
                          • дофига работы. Сложности почти те же, что и с визивиг-хтмл-редакторами
                            Ответить
                    • Спецредактор тоже как-то писал, в т.ч. со вложенностью, а не просто ключ-значение. Не знаю... неюзабельно как-то показалось. Допустим, есть у нас константа с путём к приложению, и в чистых PHP-конфигах ключи конфигурации с путями к контроллерам, шаблонам, etc заданы с привязкой к этой константе. А если бы мы применяли спецредактор, мы бы константой не попользовались, иначе как %обозначая% её как-то, а в геттере конфигурации заменяя специально написанным str_replace'ом. Для .ini это, впрочем, тоже справедливо. Короче, мне больше по душе чистые PHP-конфиги:
                      <?php return array(...
                      Ответить
                      • Я не совсем о конфигах (т.к. параметры с взаимными зависимостями и правда лучше прописывать обычным образом в пхп), а в целом о хранении некоторых видов информации в файловой системе. Вариантов использования много.
                        Ответить
                      • мм, вообще-то я имел ввиду простой редактор, не визивиг. Визивиг вообще можно придумать навороченный, даже на основе схем (создавать блоки, тянуть стрелочки и т.д.) Работы конечно дофига, стоит ли оно того?

                        а в дополнение к вашему появилось несколько идей:
                        - разрешать комбобоксом выбор типа значения: строка(возможно подходящая под заданный регексп), список(выбор значений), число(целое, дробное...), выражение. Выражение - значит любой пхп код, где можно использовать и константы, и вообще что угодно
                        - для хранения значений использовать спец.обьект (например, сваял http://pastebin.com/06iB1wz5 - еще не до конца) и использовать наследование разделов конфигураций. Тогда проблема копипасты несколько отодвигается )


                        Хотя, поскольку я обычно настройки храню в базе (и примитивный редактор из адмишки), либо в пхп-файле, и рассчитываю, что редактирующий точно знает, что делает, то спецтулзы не нужны
                        Ответить
        • Этот же конфиг, скорее всего, парсится и шеллом.
          Ответить
          • эм, где здесь шелл? это пхп, и, видимо, вся работа через веб.
            Ответить
    • Судя по всему: Его говнокоды (82)
      qbasic офигительно встрял по полной программе...
      Ответить
      • да, у меня и то поменьше.
        а чьих говнокодов, кстати, больше всего? = ) можно даже топ-10 юзверей вывести ))
        шерстить всех утомительно, вот Страйко бы наверное одним запросом к базе вычислил )))
        Ответить

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