Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Редактирование конфиг-файла в php

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
twelveee
Отправлено: 17 Июля, 2014 - 14:05:18
Post Id


Гость


Покинул форум
Сообщений всего: 70
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




Добрый день, форумчане)
Есть файл конфига configs/config.php

И есть админ панель, в который по идее можно изменять данные конфига.
CODE (htmlphp):
скопировать код в буфер обмена
  1.                         <form action="" method="POST" style="margin-left:20px;">
  2.                         <b >Заголовок сайта:</b> <input type="text" class="form-control" style="width:300px;" value="<?echo $config_tcinema['title']?>" name="title"><br>
  3.  
  4.                         <input type="submit" name="submit" value="Сохранить" class="btn btn-info"><br><br>
  5.                         </form>
  6.                        
  7.                         <?
  8.                         if(isset($_POST['submit'])){
  9. Вот тут и изменяется конфиг
  10.                         }
  11.                         ?>
  12.  
  13. Сам конфиг выглядит как массив
  14. $config_tcinema = Array(
  15. 'title' => 'SAMPLE TITLE',
  16. );
  17.  

Как изменить тайтл на $_POST['title'] при нажатии кнопки?
 
 Top
DelphinPRO
Отправлено: 17 Июля, 2014 - 14:19:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




PHP:
скопировать код в буфер обмена
  1. file_put_contents('cnfig.php', "
  2. <"."?
  3. \$config_tcinema = Array(
  4.    'title' => '" . $_POST['title'] ."',
  5. );
  6. ");

(Отредактировано автором: 17 Июля, 2014 - 14:19:51)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
twelveee
Отправлено: 17 Июля, 2014 - 15:04:25
Post Id


Гость


Покинул форум
Сообщений всего: 70
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




Спасибо за ответ, но это не совсем то, что нужно. В файле config.php не только этот массив.
А обновлять сразу много массивов, не очень правильно.

file_put_contents просто перезаписывает файл.
Мне же нужна перезапись только переменной. Это осуществимо?
Как вариант можно сделать при помощи mysql, но задача стоит именно файлом.
 
 Top
DelphinPRO
Отправлено: 17 Июля, 2014 - 15:18:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




ну елки-палки...
прочитать конфиг (он у вас наверняка читается на старте программы)
циклом перебрать весь массив, подставляя по совпадающим ключам значения из формы.

PHP:
скопировать код в буфер обмена
  1. $config_content = '';
  2. // $config_tcinema - это у вас уже есть, когда вы в первый раз читаете (инклудите) конфиг
  3. foreach ($config_tcinema as $k => $v) {
  4.     if (isset($_POST[$k])) {
  5.         $config_content .= '"' . $k . '" => "' . $_POST[$k] . '"' . PHP_EOL;
  6.     } else {
  7.         $config_content .= '"' . $k . '" => "' . $v . '"' . PHP_EOL;
  8.     }
  9. }


Кроме того, можно напрямую менять значения в $config_tcinema

PHP:
скопировать код в буфер обмена
  1. $config_tcinema['title'] = $_POST['title'];


а далее сделать var_export этого массива в файл


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
twelveee
Отправлено: 17 Июля, 2014 - 19:10:14
Post Id


Гость


Покинул форум
Сообщений всего: 70
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




Можно поподробнее про 2й вариант?
Насколько я понял,
PHP:
скопировать код в буфер обмена
  1. $config_tcinema['title'] = $_POST['title'];

нужно вставлять в скрипт редактирования, а var_export();
в самом конфиге. Так ли это?
и что нужно прописывать в var_export?
 
 Top
DelphinPRO
Отправлено: 17 Июля, 2014 - 20:58:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




twelveee пишет:
и что нужно прописывать в var_export?

почитайте ее описание. я не просто так оформил это в виде сылки


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
twelveee
Отправлено: 20 Июля, 2014 - 08:30:02
Post Id


Гость


Покинул форум
Сообщений всего: 70
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




Спасибо всем за ответы!
Решил проблему следующим образом:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.                         if(isset($_POST['submit'])){
  3. $template = '<?php
  4. $config_tcinema = Array(
  5.   "title"   => "%s",
  6.   "url"  => "%s",
  7.   "config_url"  => "%s"
  8. );
  9.  
  10. define("template", "%s");
  11. ?>';
  12.  file_put_contents($_SERVER['DOCUMENT_ROOT']."/configs/config.php", sprintf($template, $_POST['title'], "templates", $_SERVER["DOCUMENT_ROOT"]."/configs", $_POST['template']));
  13.                         }
  14.  

(Отредактировано автором: 08 Августа, 2014 - 10:27:44)

 
 Top
DelphinPRO
Отправлено: 20 Июля, 2014 - 11:46:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Знаете, чем плох такой способ?

Если вам понадобится добавить и убрать параметр в конфиг (мало ли что бывает на этапе разработки), то придется править сам конфиг и еще шаблон. Я уж молчу про эстетичность кода с вписанным шаблоном..

Чем вам вариант с var_export не нравится?

PHP:
скопировать код в буфер обмена
  1. // присвоили обновленные значения
  2. $config_tcinema['title'] = $_POST['title'];
  3.  
  4. // сформировали содержимое для конфиг-файла
  5. $config = '<'.'?'.'PHP'."\n"
  6. '$config_tcinema = '."\n"
  7. var_export($config_tcinema, true) . "\n";
  8.  
  9. // записали в файл
  10. file_put_contents($_SERVER['DOCUMENT_ROOT']."/configs/config.php", $content);


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB