From fffce1f63849763366bf428ddbe549f450cbe180 Mon Sep 17 00:00:00 2001 From: thinkphp Date: Wed, 23 Mar 2016 15:10:46 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E8=AF=BB=E5=8F=96=E6=94=B9=E6=88=90getenv=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/think/Config.php | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/library/think/Config.php b/library/think/Config.php index 74949e07..d0ebd575 100644 --- a/library/think/Config.php +++ b/library/think/Config.php @@ -72,11 +72,8 @@ class Config if (is_file($file)) { $env = include $file; foreach ($env as $key => $val) { - if (!empty($name)) { - $_ENV[ENV_PREFIX . $name . '_' . $key] = $val; - } else { - $_ENV[ENV_PREFIX . $key] = $val; - } + $name = !empty($name) ? ENV_PREFIX . $name . '_' . $key : ENV_PREFIX . $key; + putenv("$name=$val"); } } } @@ -92,10 +89,20 @@ class Config $range = $range ?: self::$range; if (!strpos($name, '.')) { + // 判断环境变量 + $result = getenv(ENV_PREFIX . $name); + if (false !== $result) { + return $result; + } return isset(self::$config[$range][strtolower($name)]); } else { // 二维数组设置和获取支持 - $name = explode('.', $name); + $name = explode('.', $name); + $result = getenv(ENV_PREFIX . $name[0] . '_' . $name[1]); + // 判断环境变量 + if (false !== $result) { + return $result; + } return isset(self::$config[$range][strtolower($name[0])][$name[1]]); } } @@ -115,18 +122,19 @@ class Config } if (!strpos($name, '.')) { - // 判断环境变量 - if (isset($_ENV[ENV_PREFIX . $name])) { - return $_ENV[ENV_PREFIX . $name]; + $result = getenv(ENV_PREFIX . $name); + if (false !== $result) { + return $result; } $name = strtolower($name); return isset(self::$config[$range][$name]) ? self::$config[$range][$name] : null; } else { // 二维数组设置和获取支持 - $name = explode('.', $name); + $name = explode('.', $name); + $result = getenv(ENV_PREFIX . $name[0] . '_' . $name[1]); // 判断环境变量 - if (isset($_ENV[ENV_PREFIX . $name[0] . '_' . $name[1]])) { - return $_ENV[ENV_PREFIX . $name[0] . '_' . $name[1]]; + if (false !== $result) { + return $result; } $name[0] = strtolower($name[0]); return isset(self::$config[$range][$name[0]][$name[1]]) ? self::$config[$range][$name[0]][$name[1]] : null; From 8cab3f1e589212638e60e0080c697987882a927e Mon Sep 17 00:00:00 2001 From: thinkphp Date: Wed, 23 Mar 2016 15:11:39 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E9=BB=98=E8=AE=A4=E7=9A=84=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E5=8F=98=E9=87=8F=E5=89=8D=E7=BC=80=20=E6=94=B9?= =?UTF-8?q?=E6=88=90=20PHP=5F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- base.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base.php b/base.php index edca2aef..33231fcc 100644 --- a/base.php +++ b/base.php @@ -39,7 +39,7 @@ defined('VALIDATE_LAYER') or define('VALIDATE_LAYER', 'validate'); defined('APP_MULTI_MODULE') or define('APP_MULTI_MODULE', true); // 是否多模块 defined('APP_DEBUG') or define('APP_DEBUG', false); // 是否调试模式 defined('APP_HOOK') or define('APP_HOOK', false); // 是否开启HOOK -defined('ENV_PREFIX') or define('ENV_PREFIX', 'T_'); // 环境变量的配置前缀 +defined('ENV_PREFIX') or define('ENV_PREFIX', 'PHP_'); // 环境变量的配置前缀 defined('IS_API') or define('IS_API', false); // 是否API接口 defined('APP_AUTO_RUN') or define('APP_AUTO_RUN', true); // 是否自动运行 defined('APP_ROUTE_ON') or define('APP_ROUTE_ON', true); // 是否允许路由 From eff3dd828ccfaaa5d127b1963e2ee432288a89b0 Mon Sep 17 00:00:00 2001 From: thinkphp Date: Wed, 23 Mar 2016 15:41:07 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F=E8=AF=86=E5=88=AB=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E8=B0=83=E8=AF=95=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- base.php | 1 - library/think/App.php | 7 ++----- library/think/Config.php | 17 ----------------- start.php | 14 ++++++++++++++ 4 files changed, 16 insertions(+), 23 deletions(-) diff --git a/base.php b/base.php index 33231fcc..768dea1d 100644 --- a/base.php +++ b/base.php @@ -37,7 +37,6 @@ defined('VIEW_LAYER') or define('VIEW_LAYER', 'view'); defined('CONTROLLER_LAYER') or define('CONTROLLER_LAYER', 'controller'); defined('VALIDATE_LAYER') or define('VALIDATE_LAYER', 'validate'); defined('APP_MULTI_MODULE') or define('APP_MULTI_MODULE', true); // 是否多模块 -defined('APP_DEBUG') or define('APP_DEBUG', false); // 是否调试模式 defined('APP_HOOK') or define('APP_HOOK', false); // 是否开启HOOK defined('ENV_PREFIX') or define('ENV_PREFIX', 'PHP_'); // 环境变量的配置前缀 defined('IS_API') or define('IS_API', false); // 是否API接口 diff --git a/library/think/App.php b/library/think/App.php index 38ae4e60..f886ea3c 100644 --- a/library/think/App.php +++ b/library/think/App.php @@ -28,9 +28,6 @@ class App */ public static function run() { - // 加载环境变量配置文件 - Config::loadEnv(APP_PATH . 'env' . EXT); - // 初始化应用(公共模块) self::initModule(COMMON_MODULE, Config::get()); @@ -276,8 +273,8 @@ class App // 读取扩展配置文件 if ($config['extra_config_list']) { foreach ($config['extra_config_list'] as $name => $file) { - $file = strpos($file, '.') ? $file : $path . $file . EXT; - Config::load($file, is_string($name) ? $name : pathinfo($file, PATHINFO_FILENAME)); + $filename = $path . $file . EXT; + Config::load($filename, is_string($name) ? $name : pathinfo($filename, PATHINFO_FILENAME)); } } diff --git a/library/think/Config.php b/library/think/Config.php index d0ebd575..7f4f829c 100644 --- a/library/think/Config.php +++ b/library/think/Config.php @@ -61,23 +61,6 @@ class Config return is_file($file) ? self::set(include $file, $name, $range) : self::$config[$range]; } - /** - * 加载环境变量配置文件 - * @param string $file 配置文件名 - * @param string $name 配置名(如设置即表示二级配置) - * @return void - */ - public static function loadEnv($file, $name = '') - { - if (is_file($file)) { - $env = include $file; - foreach ($env as $key => $val) { - $name = !empty($name) ? ENV_PREFIX . $name . '_' . $key : ENV_PREFIX . $key; - putenv("$name=$val"); - } - } - } - /** * 检测配置是否存在 * @param string $name 配置参数名(支持二级配置 .号分割) diff --git a/start.php b/start.php index 30fcb7bc..86ef2534 100644 --- a/start.php +++ b/start.php @@ -16,6 +16,20 @@ namespace think; require __DIR__ . '/base.php'; require CORE_PATH . 'Loader.php'; +// 加载环境变量配置文件 +if (is_file(ROOT_PATH . 'env' . EXT)) { + $env = include ROOT_PATH . 'env' . EXT; + foreach ($env as $key => $val) { + $name = ENV_PREFIX . $key; + putenv("$name=$val"); + } +} +// 自动识别调试模式 +if (!defined('APP_DEBUG')) { + $debug = getenv(ENV_PREFIX . 'APP_DEBUG'); + define('APP_DEBUG', $debug); +} + // 注册自动加载 Loader::register(); From 235e9f847fc3ed67b78f4de650c473ce90ca7dbe Mon Sep 17 00:00:00 2001 From: thinkphp Date: Wed, 23 Mar 2016 15:51:01 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E8=B0=83=E6=95=B4Loader::addNamespace?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E7=9A=84=E4=BD=8D=E7=BD=AE=20=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3configTest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- start.php | 6 +++--- tests/thinkphp/library/think/configTest.php | 7 +++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/start.php b/start.php index 86ef2534..b2a5a311 100644 --- a/start.php +++ b/start.php @@ -30,9 +30,6 @@ if (!defined('APP_DEBUG')) { define('APP_DEBUG', $debug); } -// 注册自动加载 -Loader::register(); - // 加载模式定义文件 $mode = require MODE_PATH . APP_MODE . EXT; @@ -41,6 +38,9 @@ if (isset($mode['namespace'])) { Loader::addNamespace($mode['namespace']); } +// 注册自动加载 +Loader::register(); + // 加载模式别名定义 if (isset($mode['alias'])) { Loader::addMap($mode['alias']); diff --git a/tests/thinkphp/library/think/configTest.php b/tests/thinkphp/library/think/configTest.php index 959a8f3e..f0048a44 100644 --- a/tests/thinkphp/library/think/configTest.php +++ b/tests/thinkphp/library/think/configTest.php @@ -94,10 +94,9 @@ class configTest extends \PHPUnit_Framework_TestCase $this->assertEquals([], Config::get(null, $range)); $this->assertEquals(null, Config::get(null, 'does_not_exist')); // test $_ENV configuration - defined('ENV_PREFIX') or define('ENV_PREFIX', '_TEST_'); - $name = 'test_name'; - $value = 'value'; - $_ENV[ENV_PREFIX . $name] = $value; + $name = 'test_name'; + $value = 'value'; + putenv(ENV_PREFIX . $name . '=' . $value); $this->assertEquals($value, Config::get($name, $range)); // test getting configuration $reflectedPropertyConfig->setValue([$range => ['abcd' => 'efg']]);