[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Хранение настроек сайта
kent666
Подскажите пожалуйста!
У меня есть n-ое количество переменных которые используются в работе сайта!
Эти данные можно менять из админ панели!
Т.е. количество постов на странице, email и прочее!
Как и в каком виде лучше хранить данные настройки в Базе SQL или же в файле!
Если в файле то в каком виде
Простой файл -> serialize( массив )
Или лучше xml?



Спустя 24 минуты, 11 секунд (25.01.2012 - 12:22) inpost написал(а):
kent666
А чем тебе не подходит .php ? Точно так же, только в виде констант или переменных. Работаешь с ним как с обычным файлом.
Он и защищеннее будет остального, по крайней мере по прямой ссылке не открыть, и не выведет на экран что не надо!
А вообще, если сайт не крупный, то лучше в БД хранить всякие настройки.

Спустя 13 минут, 29 секунд (25.01.2012 - 12:35) kent666 написал(а):
inpost сайт небольшой!
на счет файла php не знаю. Дело в том что пользователь не будет лазить по файлам! Через админ панель в файл будут попадать данные и изменяться!
Поэтому я и собираюсь использовать serialize( массив параметров )
а на счет базы есть тоже неудобства!
Разные переменные имеют различные типы!
И еще вопросик: сколько времени сервер тратит на то что бы открыть файл и извлечь из него данные! При каждой загрузке страницы будет повторяться данная операция. Не хочется что бы сайт подвисал

Спустя 3 минуты, 43 секунды (25.01.2012 - 12:39) inpost написал(а):
Так я тебе про то, что можно file_get_contents использовать и на PHP файлы, и fread тоже на php. файлы. Так что в админке достаточно будет раскрыть и перезаписать после.

Спустя 14 минут, 46 секунд (25.01.2012 - 12:54) kent666 написал(а):
а каким образом я буду искать там переменные?
при помощи регулярных выражений как вариант?

Спустя 11 минут, 2 секунды (25.01.2012 - 13:05) inpost написал(а):
kent666
Воля мысли. Можешь серилизовать строку, выбор за тобой.

Спустя 6 минут, 34 секунды (25.01.2012 - 13:11) kent666 написал(а):
inpost
Если все настройки будут записаны в файле php и в придачу в рабочем виде!

$num = "50";

То тогда можно приинкулдить данный файл и вообще не заморачиваться с file_get_content.
Только добавление или редактирование настроечных данных придется реализовывать на регулярных выражениях! :)

Спустя 1 час, 41 минута, 46 секунд (25.01.2012 - 14:53) Winston написал(а):
kent666
Лучше в ini-файле хранить, и будет намного проще извлекать нужные настройки http://ua2.php.net/manual/ru/function.parse-ini-file.php

Спустя 3 минуты, 57 секунд (25.01.2012 - 14:57) inpost написал(а):
Winston
При работе с скриптом достаточно просто "include", для работы в админке - одна простая регулярка. Ничего сложного, зато всё зашифровано.

Спустя 9 минут, 13 секунд (25.01.2012 - 15:06) kent666 написал(а):
Да в принципе по define найти все константы

Спустя 1 день, 5 часов, 7 минут, 46 секунд (26.01.2012 - 20:14) program90 написал(а):
kent666
А parse_ini_file есть функция она разбирает все конфигурационные файлы. Но если они заполняются вручную. По секциям.

Спустя 14 часов, 39 минут, 9 секунд (27.01.2012 - 10:53) kent666 написал(а):
program90 все же проще хранить конфиг данные в константах и совершать их поиск регулярными выражениями
класс

<?php

class
Writedata
{
/////////////////////////////////////////////////
// PUBLIC
/////////////////////////////////////////////////

public $info = array();
public $root;
public $file;
public $typeInt = '[0-9]+';
public $typeReal = '[0-9\.]+';
public $typeKey = '[a-z]+';
public $typeName = '[a-z0-9а-я]+';
public $typeText = '[a-z0-9а-я_\.\,\-\?!\s]+';
public $typeEmail = '[a-z0-9_\.-]+@([a-z0-9]+\.)+[a-z]{2,6}';


/**
* Constructor
*
@param int $page
*
@param int $rows
*
@param int $columns
*/

public function __construct($root)
{
$this->root = $root;
$this->file = file_get_contents($this->root);
}


public function replace($name, $value, $type)
{
$reg = '';
$s = "\'";
$s1 = "'";
switch($type){
case 'Int': $reg = $this->typeInt;
$s = "";
$s1 = "";
break;

case 'Real': $reg = $this->typeReal;
$s = "";
$s1 = "";
break;

case 'Key': $reg = $this->typeKey;
break;

case 'Name': $reg = $this->typeName;
break;

case 'Text': $reg = $this->typeText;
break;

case 'Email': $reg = $this->typeEmail;
break;
}

if(!empty($value)){
if(!preg_match("/^". $reg ."$/ui", $value))
$this->info[] = 'Не корректно внесен '. $name;
}else{
$this->info[] = 'Поле '. $name .' пустое';
}

if(empty($this->info)){
$this->file = preg_replace("#define\(\'". $name ."\'\,\s+". $s . $reg . $s ."\)#ui",
"define('". $name ."', ". $s1 . $value . $s1 .")",
$this->file);
}

}


public function error(){
return $this->info;
}

public function savedata()
{
if(empty($this->info))
file_put_contents($this->root, $this->file);
}
}

и контроллер

 include SVV_ROOT .'libs/writedata.php';
$add = new Writedata(SVV_ROOT .'setup/setting.php');

if($POST['value1'] == 'contact')
{
$add->replace('SETTING_CONTACT_EMAIL', $POST['value2'], 'Email');
$add->replace('SETTING_CONTACT_SUBJECT', $POST['value3'], 'Text');
$add->replace('SETTING_CONTACT_GOOGLE_LATITUDE', $POST['value4'], 'Real');
$add->replace('SETTING_CONTACT_GOOGLE_LONGITUDE', $POST['value5'], 'Real');
$add->replace('SETTING_CONTACT_GOOGLE_SCALE', $POST['value6'], 'Int');
$add->replace('SETTING_CONTACT_GOOGLE_KEY', $POST['value7'], 'Key');
$add->replace('SETTING_CONTACT_GOOGLE_TITLE', $POST['value8'], 'Text');

$info = $add->error();
$add->savedata();
if(empty($info)) reDirect();
}

if($POST['value1'] == 'news')
{
$add->replace('SETTING_NEWS_NUMBER', $POST['value2'], 'Int');

$info = $add->error();
$add->savedata();
if(empty($info)) reDirect();
}

Спустя 37 минут, 37 секунд (27.01.2012 - 11:31) Alehandr написал(а):
Зачем так замарачиваться?
Храни в виде php массива, а если надо в глобальное окружение переменные вывести, используй extract.

<?php
return array(
'var1' = '...',
'var2' = '...',
//...
);


<?php
//чтение:
$config = include('config.php');
extract($config); //Если нужно в глобальное окружение вытащить переменные $var1, $var2 ...

//запись:
//Сам разберешься XD


Спустя 47 минут, 30 секунд (27.01.2012 - 12:18) kent666 написал(а):
Alehandr
Да не получиться в файле настроек стоит защита
config

<?php

/**
* Generation of page of an error at access out of system
* Генерация страницы ошибки при доступе вне системы
*/

if(!defined('SVV_KEY'))
{
header("HTTP/1.1 404 Not Found");
exit(file_get_contents('./404.html'));
}

/////////////////////////////////////////////////////////
/**
* Модуль контактов
*/

define('SETTING_CONTACT_EMAIL', 'sukach_v_v@i.ua');
define('SETTING_CONTACT_SUBJECT', 'Вопрос с сайта');
define('SETTING_CONTACT_GOOGLE_LATITUDE', 48.464237);
define('SETTING_CONTACT_GOOGLE_LONGITUDE', 35.055522);
define('SETTING_CONTACT_GOOGLE_SCALE', 17);
define('SETTING_CONTACT_GOOGLE_KEY', 'abcdefg');
define('SETTING_CONTACT_GOOGLE_TITLE', 'г. Днепропетровск ул Якова Самарского 12А');

/**
* Модуль новостей
*/


define('SETTING_NEWS_NUMBER', 4);

И подключается он в процессе обычным инкудом без всяких обработок (экономия ресурса)


Спустя 4 минуты, 21 секунда (27.01.2012 - 12:23) Alehandr написал(а):
kent666
XD Как так не получится?

<?php

/**
* Generation of page of an error at access out of system
* Генерация страницы ошибки при доступе вне системы
*/

if(!defined('SVV_KEY')) {
header("HTTP/1.1 404 Not Found");
exit(file_get_contents('./404.html'));
}

return array(
'var1' = '...',
'var2' = '...',
//...
);


<?php
extract(include('config.php'));


Вуаля! =)

Кстати, даже интересно стало. Что быстрее отработает, множественные define или extract...

Спустя 19 минут, 13 секунд (27.01.2012 - 12:42) kent666 написал(а):
Alehandr
Может по записи в файл будет легче, но есть НО

У тебя подключаться файл насторек будет как
<?php
extract(include('config.php'));

А у меня

<?php
include('config.php');


Вуаля! И где будет быстрее извлекаться данные! ;)
Файл настроек будет загружаться всегда!!! Вот зачем мне нужно что бы он как можно меньше обрабатывался!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.