Допустим есть массив в конфиг файле: Код (PHP): $config = array ( 'db_host' => 'localhost', 'db_port' => 3306, 'db_login' => 'root', 'db_passw' => '', 'db_name' => 'web', 's_name' => 'test_cms', 's_about' => 'Личный кабинет для онлайн сервера', 's_keywords' => 'сервер', 's_dpage' => 'news', 's_theme' => 'Default', 's_root' => '/', 'news_by_page' => 5, 'comm_by_page' => 5, 'comm_revers' => false, 'game_news' => 1, 'timezone' => 'Europe/Moscow', 'default_skin' => true, 'sbuffer' => true, 'rewrite' => true, 'log' => false, 'offline' => false, 'install' => false, 'p_logic' => 'usual', 'smtp' => false, 'action_log' => false, 'action_max' => 10, 'action_time' => 1, 'action_ban' => 60, 'db_driver' => 'mysqli', 'db_file' => NULL, ); $bd_names = array ( 'users' => 'accounts', 'likes' => 'likes', 'ip_banning' => 'ip_banning', 'news' => 'news', 'news_categorys' => 'news_categorys', 'groups' => 'groups', 'data' => 'data', 'files' => 'files', 'comments' => 'comments', 'servers' => 'servers', 'action_log' => 'action_log', 'iconomy' => false, ); Вот допустим мне через админку нужно перезаписать значение s_name в массиве $config,что бы при этом оно перезаписалось в самом файле конфига. Каким образом это сделать?
Как хочешь,я искал в работе с файлами,но нужной мне функции не нашёл,слепой наверное Добавлено спустя 3 минуты 5 секунд: Но как тогда перезаписывать в файле конфига? Я так понял,что он каждый раз заного будет файл тогда записывать?
Elect, по-шагово будет выглядеть так: 1) открываешь/читаешь нужный тебе файл; 2) находишь то, что хочешь заменить; 3) делаешь замену нужного; 4) сохраняешь изменения; 5) закрываешь файл;
о боги... программирование это по сути решение большой глобальной задачи маленькими шажками. вот ты переприсвоих какое-то значение в своих конфигурационных массивах. теперь тебе надо: 1. открыть файл конфигурации 2. записать в него пхп-заголовок чтоб при будущем чтении пхп-машина продолжала видеть какие-то осмысленные данные 3. записать в него свою переменну 4. записать второй "заголовок" так как у тебя две переменные 5. записать вторую переменную 6. закрыть файл я тебе написал про var_export? ТЫ ПОСМОТРЕЛ В МАНУАЛЕ ЧТО ОНА ДЕЛАЕТ? ТЫ ПОПРОБОВАЛ НА ПРАКТИКЕ УВИДЕТЬ РЕЗУЛЬТАТ ЕЁ РАБОТЫ? а ты хочешь сочинить велосипед с поиском и заменой подстроки? тебе пока рано такие сложные алгоритмы брать.
То есть получается как-то так? Код (PHP): //Как лучше читать файл?Что если открывать через file() и заносить несколько массивов в массив //То есть например $array[$config['s_name']] ??? //потом находим нужное preg_match("/{is_notlogged}(.*){\/is_notlogged}/s",$array,$string); //А что если мне нужно менять сразу несколько параметров? //Дальше заменяем str_replace("/*А что здесь писать?*/",$_SESSION['login'], $tmp_content); fclose(); В общем я запутался Добавлено спустя 4 минуты 47 секунд: Ну она какие то значения собирает в массив...Но у меня несколько массивов...И несколько форм в админке,и он допустим для изменения названия сайта будет весь файл перезаписывать?Это здесь не удобно.Лучше уж и вправду попробовать реплейсить строки
раз знаком с функцией file, то его и используй для чтения файла. Потом загоняй прочтенные данные в var_export, как предложил Ganzal, находи и заменяй все что тебе угодно, и не понадобиться использовать ругелярки и строковые реплейсы. Выведешь опять в файл свои новые данные, и закроешь файл. Будет лучше, если будешь дебажить каждый свой шаг, что бы тебе было понятно что происходит на каждом шагу.
ну конечно куда мне тягаться с гуру которые ЗАДАЮТ вопросы в разделе новичков. просто сам для себя реши что тебе удобнее: ** искать и заменять подстроку в тексте при этом желательно контролируя токинезацию чтоб не сломать файл и пхп продолжил с ним работать без ошибок этапа разбора или ** file_put_contents('./config.php', sprintf('<?php $config = %s; $bd = %s;', var_export($config, true), var_export($bd, true))); канешнажэ первый вариант удобнее. куда же я развивался все эти годы...
Нащл способ,помогли Код (PHP): public static function SaveOptions() { global $config,$bd_names; $txt = '<?php'.PHP_EOL; $txt .= '$config = '.var_export($config, true).';'.PHP_EOL; $txt .= '$bd_names = '.var_export($bd_names, true).';'.PHP_EOL; $txt .= '/* This file was auto-generated by '.PROGNAME.' */'.PHP_EOL; $txt .= '?>'; if (file_put_contents(MCR_ROOT.'config.php', $txt) === false) return false; return true; }
Можно ещё по другому, чтобы не зависеть от переменных в конфигурационном файле Получение массива и запись Код (PHP): <?php $file_name = 'config.php'; $config = include($file_name); $config['test'] = false; file_put_contents($file_name, '<?php'.PHP_EOL.'return '.var_export($config, true).';'); Массив в файле Код (PHP): <?php return array ( 'test' => true, );