Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перезапись PHP-файла 
V
    Опции темы
Burrr
Дата 6.8.2009, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 1
Всего: 20



Проблема следующая. В CMS есть файл config.php, который содержит переменные для подключения к базе данных. Допустим такие:
Код
$db_host = "localhost";
$db_user = "user";
$db_password = "123456";
$db_name = "testdb";


Когда пользователь устанавливает CMS на хостинг, он вписывает в конфиг свои параметры подключения к базе (а также еще пару настроек). Делать это приходится руками, что конечному пользователю неудобно.

Появилась идея написать простой мастер установки, где юзер сможет вбить необходимые параметры в текстовые поля формы. После этого нужно будет записать введенные данные в config.php. Это вызывает ряд вопросов:
1) Как лучше всего осуществить перезапись? file_put_contents подойдет?
2) Могут ли быть конфликты при перезаписи PHP-файла? Как их можно избежать?
3) Что вообще посоветуете для красивого решения этой задачи?


--------------------
PM MAIL ICQ   Вверх
SneG0K
Дата 6.8.2009, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Burrr, а может лучше на XML? Это еще легче будет.
PM WWW Skype   Вверх
Burrr
Дата 6.8.2009, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 1
Всего: 20



SneG0K, к сожалению не имею опыта работы с XML из PHP. Посоветуете пару простых примеров для быстрого старта?


--------------------
PM MAIL ICQ   Вверх
SneG0K
Дата 6.8.2009, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Burrr, simpleXML. Рядом моя тема. Тоже не имея опыта быстро понял суть.
PM WWW Skype   Вверх
bars80080
Дата 7.8.2009, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



ну, проще всего сделать через шаблон

есть такой файлик:

Код

$db_host = "{HOST}";
$db_user = "{USER}";
$db_password = "{PASS}";
$db_name = "{DB}";


при приёме от пользователя данных из формы просто считываем шаблон и заменяем в нём значения:

Код

// обработка данных формы...

// ...

// считывание шаблона
$fp = fopen('temp.txt', 'r');
$s = fread($fp, 4096);
fclose($fp);

// вставка данных в шаблон
$ar1 = array('{HOST}','{USER}','{PASS}','{DB}');
$ar2 = array($_POST['host'], $_POST['user'], $_POST['pass'], $_POST['db']);
$result = str_replace($ar1, $ar2, $s);

// запись конфига
$fp = fopen('config.php', 'w');
fwrite($fp, $result);
fclose($fp);

PM MAIL WWW   Вверх
enof
Дата 7.8.2009, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



bars80080, а если потом нужно будет изменить значения?
Код

<pre><?php
$file = file_get_contents("config.php");
preg_match_all('#\$(.*)\s*=\s*"(.*)";#Ui', $file, $out, PREG_SET_ORDER);
print_r($out);      //Список переменных
$file = preg_replace('#(\$db_host\s*=\s*")(.*)(";)#Ui', "\\1new_value\\3", $file); //Замена значения $db_host на new_value
file_put_contents("config.php", $file);
?>

PM MAIL ICQ Skype   Вверх
Burrr
Дата 7.8.2009, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 1
Всего: 20



bars80080enof
Спасибо! С этим кодом всё понятно.
А конфликта не будет, при одновременном обращении к файлу и попыткой его перезаписи?


--------------------
PM MAIL ICQ   Вверх
bars80080
Дата 7.8.2009, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(enof @  7.8.2009,  14:26 Найти цитируемый пост)
а если потом нужно будет изменить значения?

а что мешает повторить процедуру?


Цитата(Burrr @  7.8.2009,  15:10 Найти цитируемый пост)
А конфликта не будет, при одновременном обращении к файлу и попыткой его перезаписи?

ну, смотря насколько большой трафик посетителей сайта предполагается. в общем случае даже не стоит и заморачиваться, если у одного пользователя выскочит ошибка, то сразу перезагрузившись он окажется где надо. если очень надо, то есть методы блокировки
http://www.php.ru/manual/function.flock.html

PM MAIL WWW   Вверх
enof
Дата 7.8.2009, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



bars80080,  сорри, не заметил, что шаблон в другом файле находится.
PM MAIL ICQ Skype   Вверх
Burrr
Дата 7.8.2009, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 1
Всего: 20



enofbars80080, спасибо вам! 
Держите плюсы в репу smile

Топик - клоц.


--------------------
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0778 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.