新版的webman,没有了env 1.取消的原因是什么? 2.取消后,如何区分 不同环境 的配置?
https://github.com/vlucas/phpdotenv/issues/410 https://github.com/walkor/webman/issues/200 主要是有用户发现 phpdotenv 在多线程环境下有bug。
另外的原因是想让webman内核更精简,只提供必要的 http协议解析、路由、中间件、日志等功能。 其他如数据库、redis、包括phpdotenv等等其他功能由开发者决定是否安装,以及安装哪个。这样的好处是可以更好复用php现有composer生态,也能避免webman内核因为功能过多版本更新时产生较大变动导致无法向下兼容。
虽然webman去掉了phpdotenv,但是你仍然可以通过 composer require vlucas/phpdotenv 安装它, 安装后使用getenv() 函数就可以获取配置了。
composer require vlucas/phpdotenv
getenv()
区分环境有多种方案,比如配置文件不提交到版本库,版本库里只提供exapmle.xxx.php的样本配置文件。新项目根据样本配置。这样的好处是更新时不会因为环境导致配置冲突或者配置推送到错误的环境。
我们就是想根据配置的环境,比如dev|test|prod,来判断取得对应环境的配置参数,就可以了。还是希望官方能指定一个大家公用比较多的配置组件,谢谢大佬了。
这是thinkphp的env的写法,我改了下,可以用到webman里,而且$_ENV是二进制安全的,
<?php namespace captain\webman; class Env { /** * 环境变量数据 * @var array */ protected static $data = []; /** * 读取环境变量定义文件 * @access public * @param string $file 环境变量定义文件 * @return void */ public static function load($file) { if(!is_file($file)){ return; } $env = parse_ini_file($file, true); self::set($env); } /** * 获取环境变量值 * @access public * @param string $name 环境变量名 * @param mixed $default 默认值 */ public static function get($name=null, $default = null) { if($name==null){ return self::$data; } $name=strtoupper($name); $name = strtoupper(str_replace('.', '_', $name)); if (isset(self::$data[$name])) { return self::$data[$name]; } return $default; } /** * 设置环境变量值 * @access public * @param string|array $env 环境变量 * @param mixed $value 值 * @return void */ public static function set($env, $value = null) { if (is_array($env)) { $env = array_change_key_case($env, CASE_UPPER); foreach ($env as $key => $val) { if (is_array($val)) { foreach ($val as $k => $v) { self::$data[$key . '_' . strtoupper($k)] = $v; } } else { self::$data[$key] = $val; } } } else { $name = strtoupper(str_replace('.', '_', $env)); self::$data[$name] = $value; } } }
用法,支持数组标记(实际上会把 . 都转换为_)
##############CORE################## [app] debug=1 #进程数量 count=1 server_addr=http://0.0.0.0:8080 session_drive=file
Env::get('app.count',cpu_count() * 2)
https://github.com/vlucas/phpdotenv/issues/410
https://github.com/walkor/webman/issues/200
主要是有用户发现 phpdotenv 在多线程环境下有bug。
另外的原因是想让webman内核更精简,只提供必要的 http协议解析、路由、中间件、日志等功能。
其他如数据库、redis、包括phpdotenv等等其他功能由开发者决定是否安装,以及安装哪个。这样的好处是可以更好复用php现有composer生态,也能避免webman内核因为功能过多版本更新时产生较大变动导致无法向下兼容。
虽然webman去掉了phpdotenv,但是你仍然可以通过
composer require vlucas/phpdotenv
安装它,安装后使用
getenv()
函数就可以获取配置了。区分环境有多种方案,比如配置文件不提交到版本库,版本库里只提供exapmle.xxx.php的样本配置文件。新项目根据样本配置。这样的好处是更新时不会因为环境导致配置冲突或者配置推送到错误的环境。
我们就是想根据配置的环境,比如dev|test|prod,来判断取得对应环境的配置参数,就可以了。还是希望官方能指定一个大家公用比较多的配置组件,谢谢大佬了。
这是thinkphp的env的写法,我改了下,可以用到webman里,而且$_ENV是二进制安全的,
用法,支持数组标记(实际上会把 . 都转换为_)
Env::get('app.count',cpu_count() * 2)