转载

grape动态PHP结构(一)——目录结构与配置文件

一、结构介绍

结构的名字grape,中文名叫葡萄,因为最近一个同事经常带葡萄到公司给我们吃,受到启发想到了这个名字。

1)本结构需要在 PHP5.5 中运行,如果要在 5.4 中运行,有些地方就要做些修改

2)结构中会用到MongoDB,所以需要在 php中额外引用 php_mongo. dll 文件 查看安装方法

3)还用到了性能工具 xhprof ,全文检索工具 Coreseek (改造了sphinx), 如果使用都需要额外的配置,如果不使用可以关闭

4)整合了微信的部分API接口,点击查看《 微信公众平台开发系列

5)整合了 grape-skin(葡萄皮) 静态结构,作为管理后台的页面样式与特效

6)后台管理demo帐号是 admin ,密码是 123456

7)虚拟目录结构引用如下:

<VirtualHost *:80>  DocumentRoot "D:/htdocs/grape/public/admin"  ServerName admin.grape.net </VirtualHost> <VirtualHost *:80>  DocumentRoot "D:/htdocs/grape/public/api"  ServerName api.grape.net </VirtualHost> 

二、目录结构

依托网上的开源框架 InitPHP ,略微修改了InitPHP的部分源码,使得结构更符合我自己的项目需要,并扩展了几个功能,例如全文检索配置、分页等。

1) app :放置的是控制器、试图、拦截器、缓存文件、视图编译文件与特定的配置文件,app下可以有多个项目文件,上面的admin和api隶属于两个项目中

2) conf :全局配置文件,包括数据库配置、缓存配置、自动载入配置等, 查看InitPHP框架配置

3) initphp :框架initphp库文件,大部分是原先的,有几个地方做了调整。 查看InitPHP框架全部文档

4) library :包括控制器通用文件、数据层逻辑、数据字典、表单控件编写、服务层逻辑、第三方代码以及简单的测试,这里我把library单处拎出来和app、initphp等平级。

5) logs :日志文件,可以打印出数据库查询语句,也可以做一些调试信息

6) public :项目的入口文件,全局变量配置,摆放静态资源(CSS、JS等)。如下图所示,admin文件夹中有静态资源文件,css、js等,并有自己的index.php入口文件,rpc文件是InitPHP框架中的 RPC调用配置

7) tool :放置了MySQL数据库示例代码,简易api调试工具,memcache操作工具

三、配置文件

1)conf文件

1.全局的配置放在了外面的conf文件,而在每个app下面的项目中也有一个conf文件,这里面是配置一些这个项目下需要的配置项。

2.全局配置内容和 InitPHP配置 中的基本相同,但我在封装的时候多了几个。

is_xhprof :性能分析工具, 点击查看工具配置

sphinx :全文检索工具, 点击查看工具配置

autoload :自动载入文件,载入的是library文件夹中的一些php文件。自动载入的命名是有规则的,例如下面的第一个配置,自动载入 library/controller 文件夹中的 adminController.php 文件。

/*********************************自动载入配置*****************************************/ $InitPHP_conf['autoload']['controller'] = array(  'path' => LIB_PATH . '/controller',  'files' => array('admin', 'api') ); $InitPHP_conf['autoload']['helper'] = array(  'path' => LIB_PATH . '/helper',  'files' => array('url', 'dict/const', 'dict/enum') ); 

自动载入的逻辑代码写在了InitPHP里initphp.php文件中:

private static function _autoload() {  $config = self::getConfig();  $autoloads = $config['autoload'];  foreach ($autoloads as $key=>$autoload) {   if(empty($autoload['files']) || empty($autoload['path']))    continue;   $path = $autoload['path'];   foreach ($autoload['files'] as $file) {    require_once $path . '/' . $file.ucfirst($key).'.php';   }  }  //是否打开性能测试  if($config['is_xhprof']) {   require_once LIB_XHPROF_PATH . "/xhprof_lib/utils/xhprof_lib.php";   require_once LIB_XHPROF_PATH . "/xhprof_lib/utils/xhprof_runs.php";  } } 

2)定义全局常量

1.defined.php

文件位于public下面,这个文件中将定义些目录常量,域名常量,API密钥,微信配置等,并引入全局入口文件。

<?php /**  * 常量定义  * @author: pwstrick  */ define('ROOT_PATH', dirname(dirname(__FILE__))); define('LIB_PATH', ROOT_PATH . '/library'); define('LIB_THIRD_PATH', LIB_PATH . '/third');//第三方类库目录 define('LIB_XHPROF_PATH', LIB_THIRD_PATH . '/xhprof');//性能测试工具 define('SCRIPT_PATH', 'scripts');//开发使用scripts,部署使用optimize define('UPLOAD_PATH', ROOT_PATH.'/upload');//上传路径 define('UPLOAD_HTTP', 'http://upload.grape.net');  /**  * API客户端密钥  */ define('API_IOS_KEY', 'DF_A98=D^&7$^%*9CNAhj0UO!!LM11'); define('API_ANDROID_KEY', 'KU98&)dsf8%@kji89dfadJK-800i122'); define('API_UNKNOW_KEY', 'jfdsfd798hj+@(*kb66578-223q670933');  /**  * 微信配置  */ define('WEIXIN_APPID', 'xx');//TODO define('WEIXIN_SECRET', 'xx');//TODO define('WEIXIN_TOKEN', 'xx');//TODO define('WEIXIN_NOTIFY_URL', 'http://xx');//TODO define('WEIXIN_MCHID', 'xx');//TODO define('WEIXIN_KEY', 'xx');//TODO  header("Content-Type:text/html; charset=utf-8");    require_once(ROOT_PATH . '/initphp/initphp.php'); //导入配置文件-必须载入 require_once(ROOT_PATH . '/conf/comm.conf.php'); //公用配置

2.index.php

index文件夹是各个项目的入口文件,同样位于public下面,里面有特定的配置常量,引用defined.php文件,并运行InitPHP开发框架。

<?php  require_once(dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'defined.php'); define('APP_NAME', 'admin'); define('APP_PATH', ROOT_PATH.'/app/'.APP_NAME); require_once(APP_PATH . '/conf/comm.conf.php'); //APP配置 InitPHP::init();

GitHub地址:

https://github.com/pwstrick/grape

正文到此结束
Loading...