博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Zend Framework 2.1.5 中根据服务器的环境配置调用数据库等的不同配置
阅读量:4962 次
发布时间:2019-06-12

本文共 7745 字,大约阅读时间需要 25 分钟。

在 Zend Framework 1.* 中,可以根据 Apache 服务器的环境配置来让程序调用不同的设置。

主要用于在不同情况下,调用不同的数据库、不同的警告和错误级别等:例如,在开发环境下调用本机数据库和最低级别的警告和错误提示,在测试环境下调用测试数据库和最低级别的警告和错误提示,在发布环境中调用正式数据库和较高级别的警告和错误提示。

在 ZF 1 中,可以在 Apache 的 SetEnv 指令,配合 ZF 1 的 APPLICATION_ENV 常量,以及项目目录中的 /configs/application.ini 来实现这一目的。

Apache 示例:

View Code
1  1 
2 2 DocumentRoot "E:/ZF1/public" 3 3 ServerName .local 4 4 5 5 # This should be omitted in the production environment 6 6 SetEnv APPLICATION_ENV development 7 7 8 8
9 9 Options Indexes MultiViews FollowSymLinks10 10 AllowOverride All11 11 Order allow,deny12 12 Allow from all13 13
14 14 15 15

/public/index.php 入口文件示例:

View Code
1 
bootstrap()26 ->run();

/configs/application.ini 配置文件示例:

View Code
1 [production] 2 phpSettings.display_startup_errors = 0 3 phpSettings.display_errors = 0 4 includePaths.library = APPLICATION_PATH "/../library" 5 bootstrap.path = APPLICATION_PATH "/Bootstrap.php" 6 bootstrap.class = "Bootstrap" 7 appnamespace = "Application" 8 resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" 9 resources.frontController.params.displayExceptions = 010 11 [staging : production]12 13 [testing : production]14 phpSettings.display_startup_errors = 115 phpSettings.display_errors = 116 17 [development : production]18 phpSettings.display_startup_errors = 119 phpSettings.display_errors = 120 resources.frontController.params.displayExceptions = 1

在 ZF 2 中,没有提供这一方法,只提供了用本地配置文件替换全局配置文件的方法,即在 /config/autoload 文件夹中可以放置 *global.php 文件,并在其中放置全局配置数组,再放置 *local.php 配置文件,在其中放置本地配置数组。

在载入时,会自动用 local 配置覆盖 global 配置,同时利用 svn 和 git 等版本控制工具,将 *local.php 排除在提交文件之外,以保证本地配置文件不会影响到生产环境和其他人。

但是这种方法有局限性,一是利用了 svn 和 git 的特性,二是只有两级配置。

以下提供一种类似于 ZF 1 的解决方案,思路是根据 Apache 中 SetEnv 指令设置的 APPLICATION_ENV 变量来设置 PHP 的 APPLICATION_ENV 常量,再根据此常量值来载入不同的配置文件。

Apache 示例:

View Code
1 Listen 6001 2 NameVirtualHost *:6001 3  4 
5 AllowOverride All 6 Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec 7
8 Order allow,deny 9 Allow from all10
11
12 Order deny,allow13 Deny from all14
15
16 17
18 SetEnv APPLICATION_ENV development19 ServerAdmin admin@huigu.com20 DocumentRoot "E:/clbx.cn/public"21 ServerName local.zlbx.cn22 ErrorLog "logs/local.zlbx.cn-error.log"23 CustomLog "logs/local.zlbx.cn-access.log" common24
25 26 Listen 600227 NameVirtualHost *:600228 29
30 SetEnv APPLICATION_ENV local31 ServerAdmin admin@huigu.com32 DocumentRoot "E:/clbx.cn/public"33 ServerName local.zlbx.cn34 ErrorLog "logs/local.zlbx.cn-error.log"35 CustomLog "logs/local.zlbx.cn-access.log" common36
37 38 Listen 600339 NameVirtualHost *:600340 41
42 SetEnv APPLICATION_ENV test43 ServerAdmin admin@huigu.com44 DocumentRoot "E:/clbx.cn/public"45 ServerName local.zlbx.cn46 ErrorLog "logs/local.zlbx.cn-error.log"47 CustomLog "logs/local.zlbx.cn-access.log" common48
49 50 Listen 600451 NameVirtualHost *:600452 53
54 SetEnv APPLICATION_ENV production55 ServerAdmin admin@huigu.com56 DocumentRoot "E:/clbx.cn/public"57 ServerName local.zlbx.cn58 ErrorLog "logs/local.zlbx.cn-error.log"59 CustomLog "logs/local.zlbx.cn-access.log" common60

注意其中带有 SetEnv APPLICATION_ENV 指令的那些行。这样在带有不同端口时,就会产生不同的 APPLICATION_ENV 变量值。

项目 /public/index.php 入口文件:

View Code
1 
run();

注意,下面这三行是原文件没有的:

View Code
1 // Define application environment2 defined('APPLICATION_ENV')3     || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'development'));

修改 /module/Application/Module.php:

View Code
1 
array( 4 'Application', 5 ), 6 7 'module_listener_options' => array( 8 'module_paths' => array( 9 './module',10 './vendor',11 ),12 13 'config_glob_paths' => array(14 'config/autoload/{,*.}' . APPLICATION_ENV . '.{global,local}.php', //原为 'config/autoload/{,*.}{global,local}.php',15 ),16 17 ),18 );

注意第 14 行。

在浏览器中访问 localhost:6001、localhost:6002、localhost:6003、localhost:6004 就会调用不同的配置。

此方案的缺点是不能像 ZF 1 那样,配置之间可以有继承关系,虽然通过修改 /module/Application/Module.php,可以部分实现,总是不够灵活,期待 Zend 官方提供更好的解决方案。

 

在项目 /config/autoload 文件夹分别建立 development.local.php、test.local.php、test.global.php、production.global.php 文件,分别针对 开发环境、本地测试环境、服务器测试环境、产品环境,内容分别如下:

development.local.php:

View Code
1 
array(19 'display_startup_errors' => true,20 'display_errors' => true,21 'max_execution_time' => 60,22 'date.timezone' => 'Asia/Shanghai',23 'mbstring.internal_encoding' => 'UTF-8',24 ),25 'db' => array(26 'driver' => 'Pdo',27 'dsn' => 'mysql:dbname=development;host=localhost',28 'driver_options' => array(29 PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''30 ),31 ),32 'service_manager' => array(33 'factories' => array(34 'Zend\Db\Adapter\Adapter'35 => 'Zend\Db\Adapter\AdapterServiceFactory',36 ),37 ),38 );

test.local.php:

View Code
1 
array(19 'display_startup_errors' => true,20 'display_errors' => true,21 'max_execution_time' => 60,22 'date.timezone' => 'Asia/Shanghai',23 'mbstring.internal_encoding' => 'UTF-8',24 ),25 'db' => array(26 'driver' => 'Pdo',27 'dsn' => 'mysql:dbname=testlocal;host=localhost',28 'driver_options' => array(29 PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''30 ),31 ),32 'service_manager' => array(33 'factories' => array(34 'Zend\Db\Adapter\Adapter'35 => 'Zend\Db\Adapter\AdapterServiceFactory',36 ),37 ),38 );

test.global.php:

View Code
1 
array(19 'display_startup_errors' => true,20 'display_errors' => true,21 'max_execution_time' => 60,22 'date.timezone' => 'Asia/Shanghai',23 'mbstring.internal_encoding' => 'UTF-8',24 ),25 'db' => array(26 'driver' => 'Pdo',27 'dsn' => 'mysql:dbname=testglobal;host=localhost',28 'driver_options' => array(29 PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''30 ),31 ),32 'service_manager' => array(33 'factories' => array(34 'Zend\Db\Adapter\Adapter'35 => 'Zend\Db\Adapter\AdapterServiceFactory',36 ),37 ),38 );

production.global.php:

View Code
1 
array(19 'display_startup_errors' => true,20 'display_errors' => true,21 'max_execution_time' => 60,22 'date.timezone' => 'Asia/Shanghai',23 'mbstring.internal_encoding' => 'UTF-8',24 ),25 'db' => array(26 'driver' => 'Pdo',27 'dsn' => 'mysql:dbname=production;host=localhost',28 'driver_options' => array(29 PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''30 ),31 ),32 'service_manager' => array(33 'factories' => array(34 'Zend\Db\Adapter\Adapter'35 => 'Zend\Db\Adapter\AdapterServiceFactory',36 ),37 ),38 );

 

 

转载于:https://www.cnblogs.com/matchless/archive/2013/04/28/3048885.html

你可能感兴趣的文章
nginx开启GZIP来压缩网页
查看>>
我也有了BLOG,欢迎交流
查看>>
eclipse导入javaAPI
查看>>
Python中Json对象处理的jsonpath-rw
查看>>
[Leetcode 28] 67 Add Binary
查看>>
HDU 2204 Eddy's 爱好 (容斥原理)
查看>>
【概率论】3-8:随机变量函数(Functions of a Random Variable)
查看>>
LightOj 1220 Mysterious Bacteria
查看>>
Visual Studio 2015中创建C#的Android项目提示"Value cannot be null"的解决方法
查看>>
minix文件读写中使用的一个额外但是必须的结构filp表
查看>>
Testlink1.9.17使用方法( 第三章 初始配置[配置用户、产品] )
查看>>
搭建ssm的步骤
查看>>
学习人工智能第一天
查看>>
VFS分析(一)挂载(持续更新)
查看>>
qemu中device和driver的区别 使用9p文件系统
查看>>
docker学习笔记-1
查看>>
启动命令
查看>>
【转】Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
查看>>
Expression 表达式动态生成
查看>>
TCP和UDP的区别(转)
查看>>