喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

【村长请吃饭啊】 ---北京诚聘--- 【你还在犹豫吗?】

上一主题 下一主题
 33  1/4  1  2  3  4  > 
     
标题: [原创] 快速的模块式开发框架  
  本主题被作者加入到他/她的 Blog 中  
 
qh663
版主
Rank: 7Rank: 7Rank: 7
中级会员


UID 30020
精华 0
积分 546
帖子 580
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2004-7-13
来自 河源
状态 离线
快速的模块式开发框架

当写完一个程序之后,需要再写另一个程序时,比如当你写完一个留言版之后,需要再写一个文章管理程序。请看,一般留言板程序执行文件结构:
config.php
header.inc.php
footer.inc.php
index.php
globals.php
.....
文件管理程序或其它程序的结构也可以是这样子的。因为,如果程序是放在同一个网站动行,配置是相同的,在讲究程序与代码分离的的现阶段,还要配置模板引擎,就有很多重复工作要做。如果有一个程序,可以把自已以前写的程序整合在一起,又要保持原有的独立性。程序拥有独立性与整合性并存。这就是我要说的,模块式开发。这,就需要一个适合自已的框架。
首先,从目录结构上区分一个这个框架,为易于理解,简主要结构如下:
includes/
modules/
index.php
config.php
......
1、目录includex下可以放一些常用的类库,如smarty类库,ado数据类库,或自定义类、函数库等等,每一类一个目录,然后把这些配置路经统一放置在config.php文件中
2、modules目录用来存放模块,如留言模块。每个模块为一个目录。
3、将index.php设为统一程序入口
4、config.php为全局使用的配置文件
下面就举个简单的例子:
输入网址index.php?module=article&action=list就引入下面的文件
index.php
config.php
modules/article/index.php
modules/article/list.php

QUOTE:
index.php内容如:

define('SHOW', true);//定义入口常量
require_once('config.php');//调入配置文件
$module = $_GET['module'];//调用模块
if (empty($_GET['module'])) $module = 'public';//默认值
if (!preg_match ("/^[a-z_]+$/i", $module)) die('参数错误!'); //使模块名字参数只接受字母及_字符组成,防注入
$path_module = PATH_MODULE.$module.'/';//模块路径
is_file($path_module.'index.php') or die(FILE_NULL);//如果模块不存在就停止
require_once($path_module.'index.php');//调用模块
……
config.php内容如:
defined('SHOW') or die(header("HTTP/1.1 403 Not Forbidden"));//检测是否有入口常量
define('DB_HOST', '127.0.0.1');//数据库地址
define('DB_USER', 'qh663');//数据库用户名
……//其它数据库配置与全局环境设置,如定义上面的常量(PATH_MODULE)

modules/article/index.php//模块入口,接受操作动作
defined('SHOW') or die(header("HTTP/1.1 403 Not Forbidden"));//检测是否有入口常量
$action = $_POST['action'];接受动作
if (!preg_match ("/^[a-z_]+$/i", $action)) die('参数错误!'); //使模块名字参数只接受字母及_字符组成,防注入
……//这里处理载入action之类的

modules/article/list.php//相应动作的执行,这里,可以包含任意所需代码实现
defined('SHOW') or die(header("HTTP/1.1 403 Not Forbidden"));//检测是否有入口常量
一个模块,只一个参数。一个动作,也只一个参数。看下,是不是很爽?
程序的独立与整合,只操作modules目录下的mod即可。并且程序只一个入口,非常安全!




五百多篇PHP学习资料
喜悦村BLOG
php团队接兼职项目QQ:80031807
PHP群:768844
2006-8-29 02:29 AM#1
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
fcicq
新手上路
Rank: 1
初级会员



UID 24467
精华 0
积分 21
帖子 587
金钱 20 喜悦币
威望 0
人脉 1
阅读权限 10
注册 2003-11-8
来自 fcicq.net
状态 离线
[推荐阅读] php如何显示oracle记录
不过url中这长长的一堆....




2006-8-29 11:46 AM#2
查看资料  访问主页  Blog  发短消息  顶部
 
wuminghuo
新手上路
Rank: 1
初级会员


UID 68697
精华 0
积分 38
帖子 62
金钱 38 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-2-18
来自 郑州--北京
状态 离线
[推荐阅读] 问一个目录结构的问题
单一入口对搜索引擎不是很友好.
2006-8-29 01:30 PM#3
查看资料  访问主页  发短消息  顶部
 
qh663
版主
Rank: 7Rank: 7Rank: 7
中级会员


UID 30020
精华 0
积分 546
帖子 580
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2004-7-13
来自 河源
状态 离线
[推荐阅读] 有谁研究过eWebEditor
因为现在有rewrite,可以与以前一样方便使用。
http://www.phpx.com/happy/thread-119385-1-3.html
http://www.phpx.com/happy/thread-123412-1-1.html




五百多篇PHP学习资料
喜悦村BLOG
php团队接兼职项目QQ:80031807
PHP群:768844
2006-8-30 01:20 AM#4
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
php5
金牌会员
Rank: 6Rank: 6
中级会员


UID 62897
精华 0
积分 1234
帖子 1086
金钱 1234 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2005-1-3
来自 福建
状态 离线
[推荐阅读] 怎么验证表单是否提交成功?
不错,我的权限系统单一入口就是这么做的,这样可以任意地增加模块,而且模块程序可以是完全独立的。

增加模块时是把文件名、module、action存表,访问时以 index.php?modid=n  查表并得到相关组成动作,这样也应该更安全,更便于管理


不过我认为用在后台管理比较适合
2006-8-30 09:18 AM#5
查看资料  发短消息  顶部
 
c1a1o1
版主
Rank: 7Rank: 7Rank: 7
一品带刀护卫


UID 68669
精华 0
积分 1189
帖子 2101
金钱 1189 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2006-2-17
状态 离线
[推荐阅读] 维瀚科技有限公司诚聘PHP程序员
楼上高见 



流量交换联盟
高校二手市场言情小说
2006-8-30 10:20 AM#6
查看资料  Blog  发短消息  QQ  顶部
 
ximin
注册会员
Rank: 2



UID 79266
精华 0
积分 54
帖子 59
金钱 54 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-8-30
状态 离线
[推荐阅读] 请问span的正则是什么
其实完全可以把几个主要的目录放到include_path里面
然后写一个init.php文件把函数集合文件 变量 常量初始化文件都require_once近来。
2006-8-30 11:10 AM#7
查看资料  发短消息  顶部
 
php5
金牌会员
Rank: 6Rank: 6
中级会员


UID 62897
精华 0
积分 1234
帖子 1086
金钱 1234 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2005-1-3
来自 福建
状态 离线
[推荐阅读] 是不是应该规范一下某些帖子
我的一个简单的 REWRITE + ACCESS.php 单一入口的做法

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*).html$  access.php?url_path=$1 [QSA,L]
</IfModule>
access.php

<?php
$path
=str_replace(',','/',$_GET['url_path']);
require(
$path.'.php');
?>
2006-8-30 11:59 AM#8
查看资料  发短消息  顶部
 
sanders_yao
版主
Rank: 7Rank: 7Rank: 7
or2 =333


UID 30286
精华 0
积分 2487
帖子 4632
金钱 2484 喜悦币
威望 0
人脉 3
阅读权限 100
注册 2004-7-23
来自 北京 菜户营
状态 离线
[推荐阅读] 高新急聘phper,上海
我目前写程序一个功能目录一般是如下结构:
classes/
proc/
cfg.php
head.php
foot.php
.
.
.
classes目录顾名思义就不用解释了
proc存放的是一些一般看不见的进程(代码出错了除外) 不输出结果或者间接输出结果
cfg.php一般是一个网站放一个保存一些全局变量
head.php一般是一个功能目录放一个 会使用require_once加载cfg.php和classes目录下的文件 并做一些数据的预处理
foot.php一般没什么作用 只不过在排察错误的时候会经常用到 他通过监听一些全局变量来报告分析结果 如:本页使用了哪些查询 使用了多少次 执行了多长时间等等
由于foot.php的报告输出一般会干扰 proc目录下文件的header函数转向使用 所以一般proc目录下的文件都不会加载这个文件




最近写的一些代码都会在以下地址发布,有兴趣的来批:
http://www.phpx.com/happy/thread-131368-1-1.html
2006-8-30 01:21 PM#9
查看资料  Blog  发短消息  顶部
 
php5
金牌会员
Rank: 6Rank: 6
中级会员


UID 62897
精华 0
积分 1234
帖子 1086
金钱 1234 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2005-1-3
来自 福建
状态 离线
[推荐阅读] 关于iframe的问题
楼下继续

2006-8-30 02:25 PM#10
查看资料  发短消息  顶部
 33  1/4  1  2  3  4  > 
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 


Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.026176 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP