Как изменить переменную в php-файле

175
19 декабря 2017, 19:15

Есть php-файл примерно с таким содержимым

define('TME_ID', 15);
define('THEME', 'auto');
define('TEMPLATE', 'audi');

В другом скрипте во время работы необходимо прочитать этот файл и изменить значение константы THEME на home. Затем перезаписать этот файл (права необходимые имеются).

Вопрос: есть ли универсальное решение этой задачи? Или придется загружать файл как массив функцией file(), перебирать его в цикле и выискивать нужную константу регуляркой? Может есть более простое и изящное решение? Версия PHP на сервере 5.6.32

Answer 1
  • Константы в php не изменяются в рантайме. Ознакомтесь -php.net. Как вытекает из названия - константа - это переменная, которая не меняет (и не должна) своего значения в процессе выполнения скрипта. При этом каждый, кто работает с данным приложением чётко уверен в неизменности значения константы. Это её суть. И если в процессе обработки возникает необходимость перезаписи её значения, значит вы выбрали неверный алгоритм работы вашего приложения.

Для реализации поведения, необходимого вам, используйте базу данных. Сохраняйте значение темы в базе данных и проверяйте/изменяйте сколько угодно раз в течении работы приложения. Если не используете сервер БД, можете оперировать SQLite

Если же вам комфортно работать с файловой системой - переместите константы, которые могут требовать изменений, в массив. Далее создавайте файл, в него записывайте serrialize массив значений; при необходимости unserrialize, обрабатывайте их и снова перезаписывайте .

Answer 2

может стоит рассмотреть другие варианты хранения? например, в виде массива:

ваш файл настроек будет выглядеть, например, так:

<?php
    return  array (
       'TME_ID' => 15,
       'THEME' => 'auto',
       'TEMPLATE' => 'audi',
    );

записывать такой файл можно так:

$config = [
    'TME_ID' => 15,
    'THEME'  => "auto",.
    'TEMPLATE' => "audi",
];
$content = "<?php".PHP_EOL."\treturn\t".var_export($config, true);
file_put_contents("./config.php", $content);

а загружать и преобразовывать в константы так

$config = include "./config.php";
foreach($config as $k => $v){
    if(!defined($k)){
        define($k, $v);
    }
}

Потенциально будет у вас один файл конфига, и один файл - его загрзучик, как то так упрощенно

class Settings {
   static $cfg = null;
   public static function load(){
       static::$cfg = include "./config.php";
       foreach(static::$cfg as $k => $v){
          if(!defined($k)){
              define($k, $v);
          }
       }
   }
   public static function set($key, $value){
       static::$cfg[$key] = $value;
   }
   public static function save(){
       $content = "<?php".PHP_EOL."\treturn\t".var_export(static::$cfg, true);
       file_put_contents("./config.php", $content);
   }
} Settings::load();

подключите его и будете использовать, примерно так

require_once "settings.class.php"
Settings::set('THEME', 'home');
Settings::save();
READ ALSO
Как добавить условия проверки на &ldquo;битые ссылки&rdquo; с использованием cURL?

Как добавить условия проверки на “битые ссылки” с использованием cURL?

Добрый день! Подскажите пожалуйста, поставил плагин проверки "битых ссылок", но необходимо его расширить, добавить пару url-адресов для проверки...

159
Найти и заменить с условием

Найти и заменить с условием

WP Данные из текстового поля попадают в переменную the_contentНужна функция, которая будет пробегаться по тексту, выискивать таблицы, не заключенные...

158
React + Laravel скачивание файлов

React + Laravel скачивание файлов

Есть АПИ на Laravel, я использую библиотеку Laravel-Excel что бы сгенерировать xls файл, как его правильно отдать клиенту и как сделать на реакте скачивание...

141
Имитация нажатия кнопки PHP/JS

Имитация нажатия кнопки PHP/JS

Мне нужен скрипт на PHP или JavaScript, который будет на стороннем сайте вводить в текстовое поле текст, а потом нажимать несколько кнопокID кнопок...

137