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‘, ‘[email protected](*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

时间: 2024-10-10 01:41:32

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

描述linux目录结构以及目录结构命名规定

描述linux目录结构以及目录结构命名规定第一个是根/目录,之后又很多分支,主要有:1./boot 常用于存放系统启动的目录 2./home系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,~表示当前用户的家目录 3./etc 系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有etc/profile.d; /etc/profile.HISTSIZE; /etc/issue; /etc/motd; /etc/DIR_CLORS 4./dev 存放linux系

tree命令以树形结构显示目录结构

一.安装 Centos7.4虚拟机执行以下命令安装:yum  install tree 二.基本使用 1.查看帮助信息:tree --help 2.查看root目录下目录结构:#tree 3.查看第N级目录文件:tree -L n 4.重定向到文件 原文地址:https://www.cnblogs.com/jason89/p/10231341.html

android 目录结构

1,android 目录结构 2, project 结构类型 它表示为 .gadle .idea目录结构 app目录结构 -- 编译输出的目录 build 编译目录结构 libs 类库目录结构 mirror 镜像目录结构 src 目录结构 它下面有一些主函数的目录结构 android Test测试目录结构 同时还有 .gitignore这个目录结构 app.iml实现的配置文件 - app 的配置文件 proguard-rules.pro项目的配置文件目录 proguard 配置文件 同时还要有

Day4 - 迭代器&amp;生成器、装饰器、Json &amp; pickle 数据序列化、软件目录结构规范

---恢复内容开始--- 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 需求:列表a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求把列表里的每个值加1 1 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2 b = [] 3 for i in a: 4 b.append(i+1) 5 a = b 6 print(a) 普通青

关于软件目录结构规范———(转自Alex Li)

软件目录结构规范 为什么要设计好目录结构? "设计项目目录结构",就和"代码编码风格"一样,属于个人风格问题.对于这种风格上的规范,一直都存在两种态度: 一类同学认为,这种个人风格问题"无关紧要".理由是能让程序work就好,风格问题根本不是问题. 另一类同学认为,规范化能更好的控制程序结构,让程序具有更高的可读性. 我是比较偏向于后者的,因为我是前一类同学思想行为下的直接受害者.我曾经维护过一个非常不好读的项目,其实现的逻辑并不复杂,但是却耗费

python 软件目录结构规范

为什么要设计好目录结构? "设计项目目录结构",就和"代码编码风格"一样,属于个人风格问题.对于这种风格上的规范,一直都存在两种态度: 一类同学认为,这种个人风格问题"无关紧要".理由是能让程序work就好,风格问题根本不是问题. 另一类同学认为,规范化能更好的控制程序结构,让程序具有更高的可读性. 我是比较偏向于后者的,因为我是前一类同学思想行为下的直接受害者.我曾经维护过一个非常不好读的项目,其实现的逻辑并不复杂,但是却耗费了我非常长的时间去

软件目录结构规范

软件目录结构规范 为什么要设计好目录结构? "设计项目目录结构",就和"代码编码风格"一样,属于个人风格问题.对于这种风格上的规范,一直都存在两种态度: 一类同学认为,这种个人风格问题"无关紧要".理由是能让程序work就好,风格问题根本不是问题. 另一类同学认为,规范化能更好的控制程序结构,让程序具有更高的可读性. 我是比较偏向于后者的,因为我是前一类同学思想行为下的直接受害者.我曾经维护过一个非常不好读的项目,其实现的逻辑并不复杂,但是却耗费

为什么要设计好目录结构?

为什么要设计好目录结构?"设计项目目录结构",就和"代码编码风格"一样,属于个人风格问题.对于这种风格上的规范,一直都存在两种态度:1. 一类同学认为,这种个人风格问题"无关紧要".理由是能让程序work就好,风格问题根本不是问题.2. 另一类同学认为,规范化能更好的控制程序结构,让程序具有更高的可读性.我是比较偏向于后者的,因为我是前一类同学思想行为下的直接受害者.我曾经维护过一个非常不好读的项目,其实现的逻辑并不复杂,但是却耗费了我非常长的时

Python学习-软件目录结构规范

软件目录结构规范_转自金角大王 为什么要设计好目录结构? "设计项目目录结构",就和"代码编码风格"一样,属于个人风格问题.对于这种风格上的规范,一直都存在两种态度: 一类同学认为,这种个人风格问题"无关紧要".理由是能让程序work就好,风格问题根本不是问题. 另一类同学认为,规范化能更好的控制程序结构,让程序具有更高的可读性. 我是比较偏向于后者的,因为我是前一类同学思想行为下的直接受害者.我曾经维护过一个非常不好读的项目,其实现的逻辑并不复