На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Serafim, fatalist
  
    > Как перезаписать переменную в PHP-файле?
      Добрый день.

      Подскажите как сделать. Есть PHP-файл к кодом. В этом файле есть переменная $total_items = '30', хотелось бы её изменять время от времени. Логика такая: читаем этот файл, с помощью preg_replace заменяем в нём переменную (например будет $total_items = '100'), записываем файл. Вот с регуляркой в preg_replace и возникла проблема.

      Нашел вот здесь пример https://toster.ru/q/59320, но что-то он не работает правильно. Может кто-то подскажет с рег. выражением как это правильно делается?
      Спасибо.

      ExpandedWrap disabled
        $string = "$a = '1'; $b = '2'; $c = '3';";
         
        $var_name = 'a';
        $new_value = '4';
         
        echo preg_replace("@$($var_name)\s*=\s*'.*?'@", "$$1='$new_value'", $string);
         
         
        // Результат, = '1'; = '2'; = '3';
        имхо это изврат.
        Чем не подходит $_GLOBALS, $_SESSION или БД? по крайней мере, можно писать в конфигурационный файл. А так можно легко попортить код.
          str_replace( )
            В БД, хранить можно. Но дело в том, что файл будет перезаписывать очень редко, а если хранить это значение в БД, то SQL-запросы, чтобы его получить, будут идти при каждой загрузке страницы. Поэтому и хочу избежать этого этого лишнего запроса.
              some.json
              ExpandedWrap disabled
                {"value": 30}


              any.php
              ExpandedWrap disabled
                $data = json_decode(file_get_contents(__DIR__ . '/some.json'));


              Magic :wizard:

              Добавлено
              Цитата DIS @
              $_GLOBALS

              В нормальном мире за использование $_GLOBALS сажают на кол. В принципе, как и за подобные предложения, озвученные автором :D
              Сообщение отредактировано: Serafim -
                Если файлом, то я бы сделал как-то так:

                config.php
                ExpandedWrap disabled
                  $config = [
                    'total_items' => 100,
                  ];


                изменение параметра
                ExpandedWrap disabled
                  include 'config.php';
                   
                  $config['total_items'] = 50;
                  file_put_contents('config.php', '$config = ' . var_export($config) . ';');


                Добавлено
                Serafim, а где это - нормальный мир? :D
                  Цитата DIS @
                  Если файлом, то я бы сделал как-то так:

                  тогда уж лучше
                  ExpandedWrap disabled
                    return [
                        'total_iterms' => 30
                    ];


                  ExpandedWrap disabled
                    $config = require __DIR__ . '/config.php';
                     
                    $totalItems = $config['total_items'] ?? 50;
                    // ...


                  Добавлено
                  Цитата DIS @
                  Serafim, а где это - нормальный мир?

                  Там, где год на дворе стоит 2017ый, а не начала 2000ых ;)
                    Век живи, век учись. Про возврат с require не знал.
                      Цитата Serafim @
                      тогда уж лучше

                      Но в этом случае нельзя данные автоматизировать нормально, чтобы кем-то перезаписывать (var_export не предлагать). Так что я за переносимый формат, вроде json :)
                        А json зато любой может легко прочитать обычным запросом с веб-сервера (если специально не настраивать доступ). Да и во фреймворках, например в yii, конфиг хранится в php файле, а не в json.
                          Цитата DIS @
                          А json зато любой может легко прочитать обычным запросом с веб-сервера

                          нет, не может, потому что в public директории (для веба) лежат только то, что под паблик идёт, а все системные файлы всегда располагаются вне "web root" директории. И к серверу это не привязано.

                          Добавлено
                          Цитата DIS @
                          Да и во фреймворках, например в yii, конфиг хранится в php файле, а не в json.

                          Приводить Yii в качестве качественного решения - довольно самонадеянно. Ты бы ещё битрикс привёл в пример :D
                            Цитата Serafim @
                            нет, не может, потому что в public директории (для веба) лежат только то, что под паблик идёт, а все системные файлы всегда располагаются вне "web root" директории

                            Так должно быть в нормальном приложении, но не факт, что у всех так. И дополнительная мера безопасности - это всегда хорошо. Согласен, что это не главный аргумент для выбора формата, но все же.

                            Цитата Serafim @
                            Приводить Yii в качестве качественного решения - довольно самонадеянно

                            А чем Yii плох? И что лучше?
                              Цитата DIS @
                              А чем Yii плох?

                              Говнокод в ядре и невероятно высокая связанность компонентов. Для бложиков и типовых сайтиков - божественная штука, но если проект чуть круче - начинаются пляски. Лучше: Symfony или Laravel брать сразу.

                              Добавлено
                              Цитата DIS @
                              Так должно быть в нормальном приложении, но не факт, что у всех так.

                              Тогда это их проблемы, ты так не считаешь? =) На дворе 2017ый год всё же и подобные штуки должны уже по привычке делаться.
                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0427 ]   [ 16 queries used ]   [ Generated: 29.03.24, 11:38 GMT ]