Здравствуйте, уважаемые форумчане. Помогите, пожалуйста реализовать слудующее: У меня есть файл "config.php", в котором содержится какой-то текст: Код (PHP): $conf = array( "sitename" => "Samy Engine - система управления сайтом для Minecraft", //Название сайта "forumname" => "SE - форум", //Название форума "siteaddr" => "new.samycraft.com", //Адрес главной страницы сайта "forumaddr" => "new.samycraft.com?pg=forum", //Адрес главной страницы форума "sitedesc" => "Проект игровых серверов по игре Minecraft", //Описание сайта "forumdesc" => "Форум проекта SE", // Описание форума "sitemeta" => array("Сайт", "SE", "CMS", "Minecraft", "SamyEngine"), // Мета теги сайта "forummeta" => array("Форум", "SE", "CMS", "Minecraft", "SamyEngine"), //Мета теги форума для поисковых систем "debug" => false, //Включена ли отладка "siteoff" => false, //Выключен ли сайт "siteoff_msg" => "Сайт временно отключен по техническим причинам!", //Сообщение при выключенном сайте ); В этом файле мне нужно изменить, например, это: Код (PHP): "sitemeta" => array("Сайт", "SE", "CMS", "Minecraft", "SamyEngine"), // Мета теги сайта Если не сложно, подскажите. Идеально будет с примерами. Спасибо.
Ну так не просто же изменять надо, а програмно, через php. Напимер, пользователь изменяет массив "sitemeta", и он должен измениться в этом файле.
Нужно более точно сформулировать задачу. В данном конкретном случае проще всего взять данный массив в пхп, изменить в нем то, что нужно - опять же, средствами работы с массивами в пхп, а потом просто создать config.php заново, сохранив туда этот массив простейшим foreach. Но тут есть подводный камень - если в этом файле может быть что-то помимо этого массива - то это требует дополнительной обработки уже.
В файле хранится много переменных. Среди них и булеаны и строки и массивы. И в зависимости от того что указал пользователь, нужно заменять определённую переменную, или даже несколько переменных.
То что их можно хранить в БД это понятно. Но у меня есть конкретный случай. И нужно как-то выкручиваться.
Если есть статичный файл с произвольным содержимым, в котором произвольным образом может что-то меняться - тут два варианта: 1. Писать парсер этого файла, который будет сначала считывать всю структуру, запоминать ее, потом вносить изменения, и потом сохранять все обратно в том же порядке в соответствии с запомненной структурой. Это реализуемо, но по-моему чрезмерное усложнение. 2. Оставить исходный файл как есть, и к нему подгружать чисто изменения - их хранить либо в базе, либо в отдельном файлике, где хранить сериализованный массив, содержащий инструкции - где и что поменять.
А возможно ли как-то сделать это с помощью str_replace, или подобного? Например, 1) брать содержимое, 2) искать там то что начинается, к примеру, на "sitemeta"=>array(, и заканчивается ),// Мета теги сайта, 3) Заменять что надо и переписывать этот файл уже с заменённым содержимым? Я просто не знаю как выполнить пункт 2.
Ну, если ты заметил в каком разделе находится тема))) Я не совсем понимаю как это реализовать. Можно тогда примерчик небольшой? Буду разбираться))
Желательно пример первого варианта, поскольку не хочу создавать 100500 лишних файлов, в которых будет храниться по 1 строке.
Давай тогда уж подробнее. Приведи пример того, при каких условиях и какие изменения могут вноситься в данный файл.
Смотри. У меня есть файл, (часть его можно увидеть в начале темы). Есть панель управления, в которой пользователь будет менять параметры, которые хранятся в файле. Например, я хочу поменять элемент массива $conf, а именно $conf["sitemeta"], который уже генерируется из строки, которую в ПУ вводит пользователь. Собственно, не знаю что ещё нужно объяснять. Даже, скажем так что таких массивов как $conf в файле есть 3 ($conf, $confmodules, $confdb), но мне нужно изменить только все элементы массива $conf.
var_export тебе нужен. со вторым параметром true. есть даже примеры: https://github.com/fluxbb/fluxbb/blob/master/include/cache.php#L29 пох что тебе хочется изменить 1 строку. писать всё равно придется файл целиком.
Спасибо. Именно то что мне нужно. Лайк тебе) Осталось только разобраться как пользоваться этим var_export'ом
Этот вариант годный в том случае, если там фиксированный набор этих самых массивов. Если их там ровно 3, и ничего другого не предвидится - то просто не паришься, и сохраняешь все три массива в файл var_export()'ом.
У меня именно фиксированное количество. Это конфиг файл. Там по идеи ничего больше не будет. Возможно только потом буду дописывать нужные значения.
Любые. Зависит от движка. Теоретически в файле конфига может быть произвольное количество всякого непредсказуемого барахла. --- Добавлено --- Ну и многие любят всякие ini_set() тоже пихать в файл конфига.
Не, я таким не занимаюсь. Если потребуется, сделаю файл php.ini. --- Добавлено --- А можно ли использовать этот var_export так чтобы вообще не трогать содержимое файла, кроме того что мне нужно? А то, как я понял, нужно брать всё содержимое файла и заменять то что нужно, но тогда другие значения, которые уже там хранятся тоже нужно переписывать но без изменений. А это лишний код.
preg_replace('~\$conf.*?\);~is', '$conf = '.var_export($new_conf,1), $text) Иными словами, заменяем всю часть конфига из переменной $text, начиная с $conf и кончая );, на $conf = (новое содержимое твоего конфига)
Угу. Спасибо. --- Добавлено --- Ещё 1 вопрос, если использовать вариант Хыиуду, не будет ли никаких ошибок если в файле содержатся ещё строки ");", но именно та, до которой нужно заменять - самая первая?