2017-01-01 14 views
0

У меня есть файл init.php. Этот используется для запуска сеанса, установки некоторых настроек и подобных материалов. Я звоню в этот файл по этой строке:Каков наилучший способ редактировать файл настроек, содержащий глобальную конфигурацию named в php

require_once 'core/init.php'; 

Это прекрасно работает на мой взгляд. Теперь я написал следующий скрипт, так что очень легко вызвать параметр в файле init.php.

class Config { 
    public static function get($path = null) { 
     if ($path){ 
      $config = $GLOBALS['config']; 
      $path = explode('/', $path); 

      foreach($path as $bit) { 
       if(isset($config[$bit])) { 
        $config = $config[$bit]; 
       } 
      }  
      return $config; 
     }  
     return false; 
    } 
} 

Так что теперь я могу использовать эту строку кода в других моих страниц использовать параметр:

Config::get('settings/main_color') 

Это очень легко, конечно. Но теперь я хотел бы отредактировать параметр, не изменив сам файл. Все это должно выполняться скриптами в браузере. Остальная часть моего init.php глобальные настройки выглядит так:

$GLOBALS['config'] = array(
    'mysql' => array(
     'host' => 'localhost:3307', 
     'username' => 'root', 
     'password' => 'usbw', 
     'db' => 'webshop' 
    ), 
    'remember' => array(
     'cookie_name' => 'hash', 
     'cookie_expiry' => 604800 
    ), 
    'sessions' => array(
     'session_name' => 'user', 
     'token_name' => 'token' 
    ), 
    'settings' => array(
     'main_color' => '#069CDE', 
     'front_page_cat' => 'Best Verkocht,Populaire Producten', 
     'title_block_first' => 'GRATIS verzending van €50,-', 
     'title_block_second' => 'Vandaag besteld morgen in huis!', 
    ), 
    'statics' => array(
     'header' => 'enabled', 
     'title_block' => 'enabled', 
     'menu' => 'enabled', 
     'slideshow' => 'enabled', 
     'left_box' => 'enabled', 
     'email_block' => 'enabled', 
     'footer' => 'enabled', 
     'keurmerken' => 'enabled', 
     'copyright' => 'enabled' 
    ) 
); 

То, что я надеюсь на это решение так:

Config::update('settings/main_color','blue') 

Что является лучшим способом для достижения этой цели? Использовать str_replace и заменить слово в файле? Я надеюсь, что есть лучший способ сделать это, и я был бы очень доволен, если бы вы могли мне помочь.

EDIT: (мой полный init.php файл)

<?php 
session_start(); 

define('DS',DIRECTORY_SEPARATOR); 

$GLOBALS['config'] = json_decode(__DIR__.DS.'prefs.json', true); 

spl_autoload_register(function($class) { 
    require_once 'classes/' . $class . '.php'; 
}); 

require_once 'functions/sanitize.php'; 
require_once 'functions/statics.php'; 
require_once 'functions/pagination.php'; 

if(Cookie::exists(Config::get('remember/cookie_name')) && !Session::exists(Config::get('sessions/session_name'))) { 
    $hash = Cookie::get(Config::get('remember/cookie_name')); 
    $hashCheck = DB::getInstance()->get('users_session', array('hash', '=', $hash)); 

    if($hashCheck->count()) { 
     $user = new User($hashCheck->first()->user_id); 
     $user->login(); 
    } 
} 

$_link = DB::getConnected(); 

$url_parts = explode('/',$_SERVER['REQUEST_URI']); 
$current = $url_parts[count($url_parts)-2]; 

if($current == 'page'){ 
    $_SESSION['location'] = 1; 
} 
else{ 
    $_SESSION['location'] = 0; 
} 

ответ

0

Это несколько мнение на основе, но я использую JSON или XML-файл, который анализирует конфигурационный файл. update вызовет файл, проанализирует его, а затем сохранит.

/core/init.php

$GLOBALS['config'] = json_decode(__DIR__.DS.'prefs.json', true); 

/core/prefs.json

{"mysql":{"host":"localhost:3307","username":"root","password":"usbw","db":"webshop"},"remember":{"cookie_name":"hash","cookie_expiry":604800},"sessions":{"session_name":"user","token_name":"token"},"settings":{"main_color":"#069CDE","front_page_cat":"Best Verkocht,Populaire Producten","title_block_first":"GRATIS verzending van €50,-","title_block_second":"Vandaag besteld morgen in huis!"},"statics":{"header":"enabled","title_block":"enabled","menu":"enabled","slideshow":"enabled","left_box":"enabled","email_block":"enabled","footer":"enabled","keurmerken":"enabled","copyright":"enabled"}}

Псевдо-код для обновления:

class Config 
    { 
     public static function update($path,$value) 
      { 
       # Fetch the file and convert it to json 
       $file = json_decode(file_get_contents(CONFIG_PATH),true); 
       # Do some code that will update the value.... 

       # Save file back 
       file_put_contents(CONFIG_PATH,json_encode($data)); 

       # Call your prefs to GLOBALS function here so the settings 
       # are updated in your global array 
      } 
    } 
+0

И Знаете ли вы anot ее путь без использования JSON? –

+0

XML-файл, но Json более прост – Rasclatt

+0

, но этот метод (JSON) по-прежнему работает, когда я использую функцию get? –