[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: настройки в php файле
ruzarh
Я храню настройки в php файле, т.к. в базе нехочу, т.к. лишняя нагрузка на бд ненужна, так вот, как можно читать файлы из админки, что бы удобно было их читать и править. Ну и мысли какие нибудь по этой теме.




Спустя 13 минут, 24 секунды (26.11.2011 - 22:03) alex12060 написал(а):
ruzarh

А почему нагрузка лишняя?
Очень даже небольшая нагрузка.

Ну а если так, то предлагаю хранить в виде ini файлов и далее просто редактировать как ini файлы.

Спустя 4 часа, 25 минут, 40 секунд (27.11.2011 - 02:29) okapo написал(а):
Цитата (alex12060 @ 26.11.2011 - 19:03)
ruzarh

А почему нагрузка лишняя?
Очень даже небольшая нагрузка.

Ну а если так, то предлагаю хранить в виде ini файлов и далее просто редактировать как ini файлы.

тоже так храняю, а в чем разница мнежду php и ini ?

Спустя 1 час, 3 минуты, 35 секунд (27.11.2011 - 03:32) vital написал(а):
Идиотизм.
100% автор не написал ни одного проекта, где стоит учитывать нагрузку на базу.
99% он не написал не одного проекта вообще.

Спустя 8 часов, 14 минут, 6 секунд (27.11.2011 - 11:46) ruzarh написал(а):
vital ты чет больно умный, тебя спрасили что, как можно редактировать, а ты что пишешь. Идиотизм писать посты которые ты пишешь.

А ini файлы можно читать и скачать, это не безопасно. Можно хранить их в php но редактировать смогу я, а вот менять их редктируя файл буду не я, а ему только админка подходит. А каждый раз делать запрос на статическую информацию это глупо, это тоже что получать из бд метаданные. В том же случае там можно и js хранить, но кто так делает, были случаи что и картинки в бд хранили.

Моя задача сделать так, что бы допустим языковые насторойки можно было тоже подправлять через админку.

Так у кого есть предложение?

Спустя 54 минуты, 56 секунд (27.11.2011 - 12:41) Nikitian написал(а):
Можно в ini-файлах, но с обёрткой из php. Можете посмотреть как это сделал я
Свернутый текст

<?php
/**
* Класс хранения настроек
*
@author Nikitian
*/

class Config{
static $instance = false;
var $config=array();
var $filename='config.php';
function Config($filename=''){
if($filename=='')
$filename=$this->filename;
$this->load($filename);
}

/**
* Загрузка конфига
*
@param string $filename
*/

function load($filename=''){
//Загрузка конфига
if($filename=='')
$filename=$this->filename;
$filename=dirname(__FILE__).'/'.$filename;
if(file_exists($filename)){
$this->config=parse_ini_file($filename,true);
}
}


/**
* Получение секции как массива, либо конкретного элемента
*
@param string $section Секция
*
@param mixed $key|false Элемент. Если не указывать, то возвращает секцию массивом
*
@return array,string
*/

function get($section,$key=false){
if($key===false){
if(isset($this->config[$section]))
return$this->config[$section];
return false;
}
if(isset($this->config[$section][$key]))
return $this->config[$section][$key];
return false;
}

/**
* Установка новых параметров
*
@param string $section
*
@param string $key
*
@param string $value
*
@return string
*/

function set($section,$key,$value){
$this->config[$section][$key]=$value;
return $this->config[$section][$key];
}

/**
* Удаление элемента или целой секции
*
@param string $section Секция
*
@param string $key|false Элемент. Если не указано, то удаляется вся секция!
*
@return bool|true
*/

function del($section,$key=false){
if($key===false){
unset($this->config[$section]);
}
else{
unset($this->config[$section][$key]);
}
return true;
}

/**
* Проверка наличия элемента
*
@param string $section
*
@param string $key
*
@return bool
*/

function have($section,$key){
return isset($this->config[$section][$key]);
}

/**
* Сохранение всех изменений конфига
*/

function save(){
if(!is_array($this->config) || sizeof($this->config)==0)
$this->__construct();
$filename=dirname(__FILE__).'/'.$this->filename;
if(!file_exists($filename))die('No file config ['.$filename.']');
if(!is_writable($filename))die('No permissions for write file ['.$filename.']');
$this->write_php_ini($this->config, $filename);
}

function write_php_ini($array, $file){
$res = array();
foreach($array as $key => $val){
if(is_array($val)){
$res[] = "[$key]";
foreach($val as $skey => $sval)
$res[] = "$skey = ".(is_numeric($sval) ? $sval : '"'.addslashes($sval).'"');
}
else
$res[] = "$key = ".(is_numeric($val) ? $val : '"'.addslashes($val).'"');
}
$this->safefilerewrite($file, implode("\r\n", $res));
}
function safefilerewrite($fileName, $dataToSave){
if (file_exists($fileName) && $fp = fopen($fileName, 'w')){
fwrite($fp,';<?php /*'."\n");
$startTime = microtime();
do{
$canWrite = flock($fp, LOCK_EX);
if(!$canWrite)
usleep(round(rand(0, 100)*1000));
}
while((!$canWrite)and((microtime()-$startTime) < 1000));
if ($canWrite){
fwrite($fp, $dataToSave);
flock($fp, LOCK_UN);
}
fwrite($fp,"\n".'; */ ?>');
fclose($fp);
}
else
die('No write '.$fileName);
}

/**
* Класс хранения настроек
*
@param string $filename
*
@return Config
*/

static function getInstance($filename='') {
if (!Config::$instance) {
Config::$instance = new Config($filename);
}
return Config::$instance;
}
}

}

[/php][more]

Спустя 1 час, 53 минуты, 24 секунды (27.11.2011 - 14:35) SlavaFr написал(а):
Цитата (ruzarh @ 26.11.2011 - 18:50)
Я храню настройки в php файле, т.к. в базе нехочу, т.к. лишняя нагрузка на бд ненужна, так вот, как можно читать файлы из админки, что бы удобно было их читать и править. Ну и мысли какие нибудь по этой теме.

то что удобно читать и подпровлять, это аргумент,
а вот боязнь нагуржать бд, это не аргумент, так как бд для того и зделанна чтоб ее нагружать.

####################
offtopc:
####################
Цитата (vital @ 27.11.2011 - 00:32)
Идиотизм.
100% автор не написал ни одного проекта, где стоит учитывать нагрузку на базу.
99% он не написал не одного проекта вообще.

@Витал, разве так отвечают?
не проще ли просто промолчать?

Спустя 1 час, 59 минут, 35 секунд (27.11.2011 - 16:34) TranceIT написал(а):
Цитата (ruzarh @ 26.11.2011 - 18:50)
Я храню настройки в php файле, т.к. в базе нехочу, т.к. лишняя нагрузка на бд ненужна

А как же нагрузка на диск? Может лучше их вообще не хранить? =)

Никого не слушайте и делайте на файлах, когда у вас на руках будет самописная БД и вы сами во всем запутаетесь, тогда поймете всю глупость этой затеи, как в свое время это понял я =)

Спустя 47 минут, 51 секунда (27.11.2011 - 17:22) ruzarh написал(а):
TranceIT ты читать умеешь? Мне нужны переменные, которые для всех одинаковы. Когда ты пишешь сайт, ты ложишь в базу все? Читай, в базе будет выборка, а статические данные они не меняются. ОНИ СТАТИЧЕСКИЕ.




/**
* Главный конфигурационный файл
*/
/**
* Логины и пароли для входа в админ-панель
*/

$admins = array();

/**
* Выбор языкового файла
*/

define('CMS_LANGUAGE' , 'ru');

/**
* Включение ЧПУ
*/

define('CMS_REWRITE' , 'on');

/**
* E-mail техподдержки
*/

define('CMS_SUPPORT_EMAIL' , 'no-replay@'. $_SERVER['HTTP_HOST'] .'.ru');


ВОТ ЭТИ ДАННЫЕ МНЕ ЧЕРЕЗ АДМИНКУ НАДО РЕДАКТИРОВАТЬ

И ВОТ ЭТИ




/**
* Префикс к базе данных
*/

define('CMS_DBPREFIX' , 'g_');

/**
* Подключение к базе данных
*/

define('CMS_DBSERVER' , 'localhost');

/**
* Пользователь базы данных
*/

define('CMS_DBUSER' , 'root');

/**
* Пароль к базе данных
*/

define('CMS_DBPASSWORD' , '');

/**
* База данных
*/

define('CMS_DATABASE' , 'game');

/**
* Соль для создания и срвнеия пароля
*/

define('CMS_SALT' , 'PARRALILEPIPED');

Спустя 4 минуты, 27 секунд (27.11.2011 - 17:27) Invis1ble написал(а):
нестыковочка получается:
Цитата
как можно читать файлы из админки, что бы удобно было их читать и править

Цитата
Моя задача сделать так, что бы допустим языковые насторойки можно было тоже подправлять через админку

и
Цитата
статические данные они не меняются. ОНИ СТАТИЧЕСКИЕ.

Кажется ТС сам запутался.
По теме все уже сказано - намного удобней работать с БД. Если религия не позволяет - пиши свои велосипеды, либо юзай parse_ini_*()

Спустя 4 минуты, 16 секунд (27.11.2011 - 17:31) ruzarh написал(а):
А в чем нестыковка? я написал хочу как можно было бы читать и править. А языковые могут тоже хранится в файлах.



/**
* Языыковые элементы модуля регистрации (registration)
*/

$registration = array ( );

$registration[ 'registration' ][ 'error_reg' ][ '0' ] = 'Вы не ввели Логин';
$registration[ 'registration' ][ 'error_reg' ][ '1' ] = 'Длинна Логина не должна превышать 30 символов';
$registration[ 'registration' ][ 'error_reg' ][ '2' ] = 'Вы не ввели пароль';
$registration[ 'registration' ][ 'error_reg' ][ '3' ] = 'Ваш пароль меньше 8 символов';
$registration[ 'registration' ][ 'error_reg' ][ '4' ] = 'Пароли не совпадают! Аккуратнее пожалуйста.';
$registration[ 'registration' ][ 'error_reg' ][ '5' ] = 'Вы не ввели E-mail';
$registration[ 'registration' ][ 'error_reg' ][ '6' ] = 'Не верный E-mail';
$registration[ 'registration' ][ 'error_reg' ][ '7' ][ '1' ] = 'Пользователь с именем ';
$registration[ 'registration' ][ 'error_reg' ][ '7' ][ '2' ] = ' существует.';


Согласись это статические данные. Зачем их каждый раз получать. Ладно спасибо.

Спустя 53 секунды (27.11.2011 - 17:32) ruzarh написал(а):
parse_ini_*() за это спасибо.

Спустя 1 час, 16 минут, 27 секунд (27.11.2011 - 18:48) TranceIT написал(а):
Ну и какая разница? Обращаться каждый раз в БД и каждый раз в файл? Из БД нужные поля выдергивать, а не каждый раз весь массив. PrestaShop напоминает...

Спустя 6 минут, 56 секунд (27.11.2011 - 18:55) I++ написал(а):
Может человеку оптимизация нужна.

В разных ситуациях по разному... Мелкие конфиги в файлах + мемкэш интереснее чем субд + кеширование статичных таблиц. Плюс для субд сокеты конфигурить неплохо если субд локальная или на толстом канале.

Спустя 45 минут, 6 секунд (27.11.2011 - 19:40) bodja написал(а):
Цитата
А ini файлы можно читать и скачать, это не безопасно.

В чем заключается небезопаснось?

Спустя 14 часов, 38 минут, 3 секунды (28.11.2011 - 10:18) Guest написал(а):
ini файлы можно просто открыть и посмотреть содержимое. www.musite.ru/config.ini типа того.

Спустя 45 минут, 19 секунд (28.11.2011 - 11:04) Rand написал(а):
Можно запретить доступ к ini файлам через .htaccess
<Files "*.ini"> 
Deny from all
</Files>


_____________
Не портите мои нервные клетки, так как в них живут нервные тигры!
Быстрый ответ:

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