使用PHP动态写入配置文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用PHP动态写入配置文件相关的知识,希望对你有一定的参考价值。

实现SAAS(多租户)应用程序,我的情况是应用程序需要根据想要登录的用户连接到不同的数据库。数据库适用于不同的机构。让我们说机构A的MANAGER-A,机构B的MANAGER-B,想要登录他们的各种机构。

我正在实施的过程是:涉及3个数据库:DEFAULT-DB,INSTITUTION-A-DB,INSTITUTION-B-DB。 DEFAULT-DB包含每个用户的所有登录和数据库凭据。这意味着在MANAGER-A可以登录他的应用程序之前,首先,他将登录到DEFAULT-DB,如果成功,他的详细信息将被提取并记录并设置为配置的参数。 php文件。这意味着连接将基于DEFAULT-DB提取和传递的参数进行动态处理。我的问题是这些:

如何动态地将这些参数写入config.php文件?

其次,如果我的实施不是最好的,我向专家提供建议。

Config.php文件

<?php 

unset($CFG);
global $CFG;
$CFG = new stdClass();

$CFG->dbtype    = 'mysqli';
$CFG->dblibrary = 'native';
$CFG->dbhost    = 'localhost';
$CFG->dbname    = 'mydb';
$CFG->dbuser    = 'root';
$CFG->dbpass    = '';
$CFG->prefix    = 'my_';
$CFG->dboptions = array (
  'dbpersist' => 0,
  'dbport' => '',
  'dbsocket' => '1',
  'dbcollation' => 'utf8mb4_unicode_ci',
);

$CFG->wwwroot   = 'http://localhost:8888/myapp';
$CFG->dataroot  = '/Applications/MAMP/data/myapp_data';
$CFG->admin     = 'admin';

$CFG->directorypermissions = 0777;

require_once(dirname(__FILE__) . '/lib/setup.php');

这是Moodle。我尝试过IOMAD,它是一个很棒的应用程序,但不能解决我的需求。

答案

这是一个糟糕的解决方案,恕我直言。当您重写配置文件时,当下一个请求加载该文件时会发生什么?他们将加载错误的配置。

我将创建另外两个配置文件:config_inst_a.php和config_inst_b.php。然后在用户登录时设置一个包含要加载的设置文件名的会话变量。然后,您可以在其他设置文件中重新定义数据库信息变量。如果会话变量中包含文件名,请在默认配置之后加载该文件,并替换数据库连接值。

添加了示例代码:

真的,非常简短:

// Log in user here, and get info about what user company..
$session_start();
$_SESSION['User_ConfigFile'] = 'settings'.$userCompany.'.php';

// More code, or page redirect, or whatever, but the below goes on every page AFTER the default DB is included:

$session_start();
require_once($_SESSION['User_ConfigFile']);

以上是关于使用PHP动态写入配置文件的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp 动态配置

动态内存分配php

php入门一ubuntu16.04中php环境配置及一个网页

MyBatis框架—动态 SQL配置文件事务

LAMP的基本配置

如何使用 PHP 安全地将 JSON 数据写入文件