Запись элемента в массив с изменением файла

167
16 февраля 2018, 19:57

Имеется файл настроек config.php. Настройки хранятся в ассоциативном массиве. Нужно, чтобы можно было из админки перезаписывать значения ключей в массиве. То есть чтобы они и в файле перезаписывались. Форму и обработчик я уже написал. Данные все приходят. На экран вывести могу, а записать в файл нет. Через fwrite() тупо стирает все и записывает одну строку.
Вот config.php:

$config = array(
 'description' => 'Введите описание!',
 'keywords' => 'ключевые слова',
 'blog_name' => 'Название сайта',
 'template' => 'briton',
 'db' => array(
     'host' => 'localhost',
     'user' => 'root',
     'password' => '',
     'basename' => 'armor' 
    )
);
Answer 1

Подробней о var_export.

$config = array(
    'description' => 'Введите описание!',
    'keywords' => 'ключевые слова',
    'blog_name' => 'Название сайта',
    'template' => 'briton',
    'db' => array(
        'host' => 'localhost',
        'user' => 'root',
        'password' => '',
        'basename' => 'armor'
    )
);
$contents = var_export($config, true); // Если передано и значение равно TRUE, var_export() вернет представление переменной вместо его вывода.
file_put_contents('config.php', "<?php\n return {$contents};\n");

Результат в config.php:

<?php 
     return array ( 
      'description' => 'Введите описание!', 
      'keywords' => 'ключевые слова', 
      'blog_name' => 'Название сайта', 
      'template' => 'briton', 
      'db' =>  
      array ( 
        'host' => 'localhost', 
        'user' => 'root', 
        'password' => '', 
        'basename' => 'armor', 
      ), 
    );

UPDATE Чтобы просто перезаписать строку.

$for_edit = "template";               // Ищем ключ который нужно заменить
$what = "'template' => 'my_own',\n";  // А тут делаем строку из ключа и нового значения этого ключа
$fopen = @file("config.php");  
foreach ($fopen as $key => $value) {
    if (substr_count($value,$for_edit)) {     
        array_splice($fopen, $key, 1, $what); // Если нашли совпадение, то заменяем
    }
    $f = fopen("config.php", "w"); // Перезаписали в файл
    for($i = 0; $i < count($fopen); $i++) {
        fwrite($f, $fopen[$i]);
    }
    fclose($f);
}
READ ALSO
Не могу составить запрос к БД

Не могу составить запрос к БД

Есть таблица hm_access_token в которой 3 столбца: token, user_id, date_of_issue

127
Каталог магазина, размеры php Mysql?

Каталог магазина, размеры php Mysql?

Озадачили сделать ИМ с массой прибамбасов, со всем разобрался кроме вывода доступных размеров в каталоге: как пример ( 42

162
Выборка данных регулярным выражением в php

Выборка данных регулярным выражением в php

Всем привет, немного не могу разобраться с регулярными выражениямиИмеется строка вида:

145
Множественное наследование в php

Множественное наследование в php

Возможно ли наследование свойств и методов от нескольких классов в php? если да, то пример пожалуйста

134