За последние 24 часа нас посетили 49896 программистов и 1733 робота. Сейчас ищут 784 программиста ...

Перезапись в конфиг файле

Тема в разделе "PHP для новичков", создана пользователем Elect, 14 авг 2015.

  1. Elect

    Elect Новичок

    С нами с:
    4 авг 2015
    Сообщения:
    70
    Симпатии:
    0
    Допустим есть массив в конфиг файле:
    Код (PHP):
    1. $config = array (
    2.   'db_host' => 'localhost',
    3.   'db_port' => 3306,
    4.   'db_login' => 'root',
    5.   'db_passw' => '',
    6.   'db_name' => 'web',
    7.   's_name' => 'test_cms',
    8.   's_about' => 'Личный кабинет для онлайн сервера',
    9.   's_keywords' => 'сервер',
    10.   's_dpage' => 'news',
    11.   's_theme' => 'Default',
    12.   's_root' => '/',
    13.   'news_by_page' => 5,
    14.   'comm_by_page' => 5,
    15.   'comm_revers' => false,
    16.   'game_news' => 1,
    17.   'timezone' => 'Europe/Moscow',
    18.   'default_skin' => true,
    19.   'sbuffer' => true,
    20.   'rewrite' => true,
    21.   'log' => false,
    22.   'offline' => false,
    23.   'install' => false,
    24.   'p_logic' => 'usual',
    25.   'smtp' => false,
    26.   'action_log' => false,
    27.   'action_max' => 10,
    28.   'action_time' => 1,
    29.   'action_ban' => 60,
    30.   'db_driver' => 'mysqli',
    31.   'db_file' => NULL,
    32. );
    33. $bd_names = array (
    34.   'users' => 'accounts',
    35.   'likes' => 'likes',
    36.   'ip_banning' => 'ip_banning',
    37.   'news' => 'news',
    38.   'news_categorys' => 'news_categorys',
    39.   'groups' => 'groups',
    40.   'data' => 'data',
    41.   'files' => 'files',
    42.   'comments' => 'comments',
    43.   'servers' => 'servers',
    44.   'action_log' => 'action_log',
    45.   'iconomy' => false,
    46. ); 
    Вот допустим мне через админку нужно перезаписать значение s_name в массиве $config,что бы при этом оно перезаписалось в самом файле конфига.
    Каким образом это сделать?
     
  2. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    тебе прям по-шагово описать? :)
     
  3. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    var_export + удобный способ записи файла
     
  4. Elect

    Elect Новичок

    С нами с:
    4 авг 2015
    Сообщения:
    70
    Симпатии:
    0
    Как хочешь,я искал в работе с файлами,но нужной мне функции не нашёл,слепой наверное

    Добавлено спустя 3 минуты 5 секунд:
    Но как тогда перезаписывать в файле конфига?
    Я так понял,что он каждый раз заного будет файл тогда записывать?
     
  5. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    Elect, по-шагово будет выглядеть так:
    1) открываешь/читаешь нужный тебе файл;
    2) находишь то, что хочешь заменить;
    3) делаешь замену нужного;
    4) сохраняешь изменения;
    5) закрываешь файл;
    :)
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    о боги... программирование это по сути решение большой глобальной задачи маленькими шажками.
    вот ты переприсвоих какое-то значение в своих конфигурационных массивах. теперь тебе надо:
    1. открыть файл конфигурации
    2. записать в него пхп-заголовок чтоб при будущем чтении пхп-машина продолжала видеть какие-то осмысленные данные
    3. записать в него свою переменну
    4. записать второй "заголовок" так как у тебя две переменные
    5. записать вторую переменную
    6. закрыть файл

    я тебе написал про var_export? ТЫ ПОСМОТРЕЛ В МАНУАЛЕ ЧТО ОНА ДЕЛАЕТ? ТЫ ПОПРОБОВАЛ НА ПРАКТИКЕ УВИДЕТЬ РЕЗУЛЬТАТ ЕЁ РАБОТЫ?

    а ты хочешь сочинить велосипед с поиском и заменой подстроки? тебе пока рано такие сложные алгоритмы брать.
     
  7. Elect

    Elect Новичок

    С нами с:
    4 авг 2015
    Сообщения:
    70
    Симпатии:
    0
    То есть получается как-то так?
    Код (PHP):
    1. //Как лучше читать файл?Что если открывать через file() и заносить несколько массивов в массив
    2. //То есть например $array[$config['s_name']] ???
    3. //потом находим нужное
    4. preg_match("/{is_notlogged}(.*){\/is_notlogged}/s",$array,$string);
    5. //А что если мне нужно менять сразу несколько параметров?
    6. //Дальше заменяем
    7. str_replace("/*А что здесь писать?*/",$_SESSION['login'], $tmp_content);
    8.  
    В общем я запутался :)

    Добавлено спустя 4 минуты 47 секунд:
    Ну она какие то значения собирает в массив...Но у меня несколько массивов...И несколько форм в админке,и он допустим для изменения названия сайта будет весь файл перезаписывать?Это здесь не удобно.Лучше уж и вправду попробовать реплейсить строки
     
  8. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    раз знаком с функцией file, то его и используй для чтения файла. Потом загоняй прочтенные данные в var_export, как предложил Ganzal, находи и заменяй все что тебе угодно, и не понадобиться использовать ругелярки и строковые реплейсы. Выведешь опять в файл свои новые данные, и закроешь файл.
    Будет лучше, если будешь дебажить каждый свой шаг, что бы тебе было понятно что происходит на каждом шагу. :)
     
  9. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну конечно куда мне тягаться с гуру которые ЗАДАЮТ вопросы в разделе новичков. просто сам для себя реши что тебе удобнее:
    ** искать и заменять подстроку в тексте при этом желательно контролируя токинезацию чтоб не сломать файл и пхп продолжил с ним работать без ошибок этапа разбора
    или
    ** file_put_contents('./config.php', sprintf('<?php $config = %s; $bd = %s;', var_export($config, true), var_export($bd, true)));

    канешнажэ первый вариант удобнее. куда же я развивался все эти годы...
     
  10. Elect

    Elect Новичок

    С нами с:
    4 авг 2015
    Сообщения:
    70
    Симпатии:
    0
    Нащл способ,помогли
    Код (PHP):
    1. public static function SaveOptions() {
    2.     global $config,$bd_names;
    3.         
    4.     $txt  = '<?php'.PHP_EOL;
    5.     $txt .= '$config = '.var_export($config, true).';'.PHP_EOL;
    6.     $txt .= '$bd_names = '.var_export($bd_names, true).';'.PHP_EOL;
    7.     $txt .= '/* This file was auto-generated by '.PROGNAME.' */'.PHP_EOL;
    8.     $txt .= '?>';
    9.  
    10.         if (file_put_contents(MCR_ROOT.'config.php', $txt) === false) return false;
    11.  
    12.     return true;
    13.     }
     
  11. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Можно ещё по другому, чтобы не зависеть от переменных в конфигурационном файле

    Получение массива и запись
    Код (PHP):
    1. <?php
    2. $file_name = 'config.php';
    3. $config = include($file_name);
    4.  
    5. $config['test'] = false;
    6.  
    7. file_put_contents($file_name, '<?php'.PHP_EOL.'return '.var_export($config, true).';'); 
    Массив в файле
    Код (PHP):
    1. <?php
    2. return array (
    3.   'test' => true,
    4. );