2013-06-19 34 views
0

我知道这个问题多次询问,但几乎所有的答案都告诉save in db$this->config->set_item安装时更新代码点火器配置文件

但是这些答案不适用于我。我没有制作一个网站,而是一个开源项目,并且为非技术人员开发安装脚本,这将在安装过程中为用户设置每一件事情。为此,我需要在安装过程中用用户特定的设置更新配置文件,并在稍后形成管理面板(如果用户需要)。

显然保存在数据库中并不适用,因为我甚至需要通过安装脚本在配置文件中写入数据库凭据。 $this->config->set_item也不适用,因为它只设置当前会话,我想永久设置它。

现在我正在创建配置文件模板和更新变量的想法。达到要求是否正确?再次出现另一个问题,如果用户从管理面板更改某些设置(例如数据库凭证),更改将不会立即反映出来。有没有解决方法或更好的解决方案?

回答

3

您只需将配置文件读取为常见文件(如* .txt),然后解析并更改所需内容即可。例如,你想改变用户名连接数据库(我不检查这个代码,这只是一个例子):

$out = ''; 
$pattern = '$db[\'default\'][\'username\']'; 
$newValue = 'root'; 
$fileName = "application/config/database.php"; 
if(file_exists($fileName)) { 
    $file = fopen($fileName,'r+'); 
    while(!feof($file)) { 
     $line = fgets($file); 
     if(strpos($line, $pattern) !== false){ 
      $out = $pattern . " = '". $newValue . "'"; 
     }else{ 
      $out = $line; 
     } 
    } 
    file_put_contents($file, $out); 
    fclose($file); 
}  
+0

感谢您的回复@ToxaBes。这将解决安装过程中的问题,因为安装脚本将是一个简单的PHP文件,不会依赖于CI。但是,你能提出关于第二部分的任何想法吗?我如何从管理面板更改配置值,这基本上是一个CI控制器?如果我应用相同的逻辑,新值将不会立即反映在CI中? –

+0

是的,你想从管理面板改变它,你可以使用相同的逻辑。要立即应用更改,您可以将index.php中的ENVIRONMENT选项设置为“开发”(〜第21行)。这意味着什么没有缓存将被使用。如果您使用另一种缓存机制,则可以在更改像以下这样的somrthing配置后清理缓存:http://ellislab.com/codeigniter/user-guide/libraries/caching.html – ToxaBes

+0

请注意,如果您使用PDO进行数据库连接并更改数据库配置文件,则应关闭并打开新的PDO连接。 – ToxaBes