在apache配置文件中将数组设置为环境变量的值

时间:2018-12-18 16:45:11

标签: php apache environment-variables

在以下示例中,我正在使用apache配置文件来设置环境变量,例如DBPASS:

if let image_download = UIImage(data: data) {
   let photo:Data = image_download.sd_imageData(as: SDImageFormat.webP)!
}

然后我在PHP中使用<VirtualHost *:80> ServerName project.localhost ServerAdmin webmaster@localhost DocumentRoot /var/www/html/project SetEnv DBPASS "softwaredeveloper" <Directory "/var/www/html/project"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> </VirtualHost> 来获取变量og的值,如下所示:

getenv

有没有一种方法可以将数组另存为apache配置文件中的环境变量?我想在PHP中获得一个像这样的值:

$pass = getenv("DBPASS")

如何将[ "DBPASS" => "softwaredeveloper", "LOG_CONFIG" => [ "LOG_FILE" => "/var/log/project/actions.log", "DELIMITER" => ",", "DATE_FORMAT" => "d.m.Y H:i:s", "SHORT_DATE_FORMAT" => "d.m.Y" ] ] 变量添加到apache配置中?

1 个答案:

答案 0 :(得分:1)

我认为合理的假设是,有效的环境变量必须是字符串的键值对,并且不能表示更复杂的数据结构(例如数组或对象)-就我所知,确实是这种情况。 / p>

在任何情况下,值得注意的是,当使用变量名调用getenv()时,返回的值的类型将是存在变量名时的string或{{1} } varname不存在的地方。

来自PHP文档:

false

如果您在Stack Overflow上搜索其他类似的问题,则会发现一些创造性的变通办法,这些变通办法建议将所需的结构转换为可以表示为字符串的格式,然后在导入脚本时进行解码-例如以逗号分隔。值字符串或JSON编码的对象。

例如,假设您创建了以下环境变量:

string getenv ( string $varname [, bool $local_only = FALSE ] )

您可以将其导入并解码到PHP关联数组中,如下所示:

export DB_CONFIG='{"DB_NAME": "foo", "DB_PASSWORD": "bar"}'

这是可行的,但我认为它确实需要权衡考虑,而不是单独设置环境变量。它可能很重要,也可能不重要,具体取决于您的用例,但是您失去了独立于其他变量来添加,更改或删除环境变量的能力。

例如,您可能想定期更新数据库密码,但保留相同的主机名和用户名。

更新$dbConfig = json_decode(getenv('DB_CONFIG'), true); 的值肯定比重新创建数据结构,将其重新编码为字符串然后更新更容易。在后一种情况下,您需要确保所做的更改在结构和语法上都是正确的。

因此,尽管有些重复,但我认为设置单个值是最简单,最清晰的方法:

DB_PASSWORD

尽管个人观点,但我认为使您的配置尽可能简单明了是有益的。

最后,如果要避免重复调用export LOG_CONFIG_FILE="/var/log/project/actions.log" export LOG_CONFIG_DELIMITER="," export LOG_CONFIG_DATE_FORMAT="d.m.Y H:i:s" export LOG_CONFIG_SHORT_DATE_FORMAT="d.m.Y" # etc. 多次以导入所需的所有环境变量,则值得注意的是,当您不带参数调用getenv()时,以关联数组的形式返回所有已定义的环境变量:

getenv()

PS:如果您绝对需要配置中的其他结构,parse_ini_file()可以对配置结构和类型执行一些有限的解析就毫无价值,但这显然意味着您必须将配置存储在.ini文件中。 / p>