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();

,如需转载请自行联系原作者	



相关文章
|
7月前
|
存储 PHP
(MAC)PHP php.ini 配置文件
(MAC)PHP php.ini 配置文件
106 0
|
9月前
|
JSON PHP 数据格式
layui框架实战案例(1):layui组件table异步加载数据结合php后台动态翻页的解决方案
layui框架实战案例(1):layui组件table异步加载数据结合php后台动态翻页的解决方案
204 0
|
9月前
|
JSON 前端开发 安全
ajax中实现访问url已阅即焚的解决方案(url动态参数、变量加密、常量不变、php加密解密、API访问验证方式)
ajax中实现访问url已阅即焚的解决方案(url动态参数、变量加密、常量不变、php加密解密、API访问验证方式)
178 0
|
9月前
|
存储 缓存 JSON
php开发实战分析(6):配置文件或缓存文件的生成与调用
php开发实战分析(6):配置文件或缓存文件的生成与调用
103 0
|
9月前
|
存储 PHP
php开发实战分析(2):cookie的动态使用(设置、获取、删除、猜你喜欢原理、购物车调用)
php开发实战分析(2):cookie的动态使用(设置、获取、删除、猜你喜欢原理、购物车调用)
134 0
|
9月前
|
存储 算法 前端开发
php动态密码和加密解密函数的使用(动态密码、Discuz核心函数AuthCode、任意输入密码验证)
php动态密码和加密解密函数的使用(动态密码、Discuz核心函数AuthCode、任意输入密码验证)
151 0
php动态密码和加密解密函数的使用(动态密码、Discuz核心函数AuthCode、任意输入密码验证)
|
10月前
|
PHP
PHP——控制结构
PHP——控制结构
|
12月前
|
PHP
【web 开发基础】PHP 的流程控制之多向条件分支结构(switch) -PHP 快速入门 (16)
switch语句和elseif相似,也是一种多向条件分支结构,但if和elseif语句使用布尔表达式或布尔值作为分支条件来进行分支控制;而switch语句则用于测试一个表达式的值,并根据测试结果选择执行相应的分支程序,从而实现分支控制.switch语句由一个控制表达式和多个case标签组成,case标签后紧跟一个代码块,case标签作为这个代码块的标识.switch语句的语法格式如下:
127 0
|
12月前
|
PHP
【web 开发基础】PHP 的流程控制之嵌套(巢状)条件分支结构 -PHP 快速入门 (15)
嵌套条件分支结构,也称为巢状条件分支结构。其实就是将if语句进行嵌套,即是在if或者else后面的语句块中又包含if语句。if语句可以无限层第嵌套在其他if语句中,这给程序的不同部分的条件执行提供了充分的弹性,是程序设计中经常使用的技术。
88 0