热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

自制简洁可扩展MVC的php框架-PHP源码

自制简洁可扩展MVC的php框架
编写初衷:原先想用thinkphp框架,后来经过阅读thinkphp代码,发现一个ip获取的欺骗bug以及非常严重的PDO封装还有漏洞,有可能导致注入的BUG,所以决定自己写框架系统,从最简单的方式开始,最基础架构先出来,后期会根据自己业务需求,封装扩展更多的类库及方法。

有关thinkphp的类库的bug,是3.2版本的bug,3.2.1官方根据我的提示,修复了bug,详见
http://www.thinkphp1.cn/topic/10965.html 我和thinkphp官方讨论对话文章

框架宗旨:我一直觉得框架没有大小、好坏之分,适用才是关键,不同的场合可能不要不同的技术支持。编写这个框架主要是为了自己用,也同时为了跟大家一起分享学习。框架核心一点是安全,甚至可以因为安全性的要求牺牲一点框架性能。其次是根据需要的可扩展性,再其次是高效性,尽量减少不必要的类库加载。
尽量减少不必要的类库加载。
--------------------------------------------------------------------------------
2014-02-27 更新说明
--------------------------------------------------------------------------------
1.增加上传类库Upload类,方便文件上传操作

2.增加分页类库Page类,方便分页操作

--------------------------------------------------------------------------------
2014-02-25 更新说明
--------------------------------------------------------------------------------
1.对session做了处理,支持memcache的扩展的服务器,默认session存储在memcache中提升效率


2.扩展图片操作类库,支持获取验证码、验证码校验(不区分大小写)、图片加水印(图片水印或者文字水印)、图片等比放大或缩小,均支持gif、png或jpg扩展名格式

-------------------------------------------------------------
2014-02-24 更新说明
-------------------------------------------------------------
更新对于所有的表单的post请求,增加了令牌token验证支持,可以用常量OPEN_TOKEN设置是否开启令牌校验
HIDDEN_TOKEN_NAME常量设定令牌校验名称
action中使用$this->open_token = true或者$this->open_token = false设置针对性action方法是否开启令牌校验


-------------------------------------------------------------
2014-02-22 12:55:34 更新说明
-------------------------------------------------------------
更新由于疏忽if的模板中少了else if和else的问题,即增加了else if和else的模板的支持
-------------------------------------------------------------
2014-02-22 更新说明
-------------------------------------------------------------
1.修复url rewrite 没有添加action字符串
2.修复安全模式下server遇到array处理报错问题
3.在自制的模板引擎中,除了<{$val}> <{if ()}> <{/if}> <{loop()}> <{/loop}> <{foreach()}> <{/foreach}>之外增加include的支持,为代码模板公用提供了方便,提供两种实现方式,例子如
<{include="Index/test"}> 这里的action是Index,对应的action的方法method是test,而且模板也是test.html
<{include="Index/test/test_view"}> 这里的action是Index,对应的action的方法method是test,而且模板是test_view.html

-------------------------------------------------------------
2014-02-20 更新说明
-------------------------------------------------------------
1.修复了在关闭debug模式后,如果出现notice或者waring的情况的时候激发报错的提示问题

2.为了方便日后业务开发需求,增加Cache缓存类,支持文件缓存和memcache缓存,操作完全统一,通过get、set、rm等操作统一操作memcache或者文件缓存

1.mysql操作方面使用pdo方式,摒弃以往的mysql_connect或者mysqli_connect,完全杜绝了SQL注入的可能性

2.简单快捷使用正则方式实现模板引擎,支持if、foreach、loop、直接赋值的模板操作

3.高效、快捷、可扩展,可以根据自身需要任意扩展类库,目前类库仅仅实现mysql的操作(PDO方式封装),可以根据需要扩展gd操作、文件操作、session操作、缓存等相关类库

4.全面支持MVC模式,类库、方法、函数自动加载机制

5.全面支持url rewrite的伪静态模式

6.出于安全考虑,封装了安全模式过滤函数,可以根据需要自己设定是否开启安全模式

7.2014-02-22更新的版本中增加了Cache缓存类,支持memcache和文件缓存两种模式,同时为了更好的代码复用,模板引擎在原有的基础上扩展了include公共模块的支持

温馨提示:如果大家需要下载csdn资源、pudn资源、51cto资源,可以到www.itziy.com/下载

-------------------------------------------------------------
2014-02-22 框架使用简单介绍
-------------------------------------------------------------
1.框架总体分为MVC的模式,下载后直接访问http://www.xxx.com/就可以自动生成相应的MVC架构。当然是否生成demo是根据CREATE_DEMO常量进行控制的,相关的其他常量请详见framework/Framework.php里面的代码

2.支持控制过滤$_POST/$_GET/$_REQUEST/$_SERVER/$_COOKIE变量参数和值的安全模式

3.framework/Common/functions.php定义了常用的函数,包括如下的一些,详见代码
getIp 获取ip地址
setc、getc、delc对于COOKIE的读、写、删操作
mkdirs、rm文件夹的创建和删除,支持批量创建和删除
send_http_status http状态头信息发送
C 读取配置文件
safe 安全模式过滤函数
build 生成框架例子的文件夹函数
echo_memory_usage 框架内存使用格式化输出函数
import 导入文件函数,主要用于记录框架引用的文件个数
debuginfo 调试信息输出函数
load_functions 自动加载自定义的系统函数库文件以及用户自定义的函数库文件
my_autoload 实现自动加载类库文件
U 对需要格式化的url进行格式化返回。格式如U(控制器名称/方法名称, array(&#39;参数key&#39; => &#39;参数value&#39;, &#39;参数key2&#39; => &#39;参数value2&#39;)) example U(&#39;User/login&#39;, array(&#39;un&#39; => &#39;zs&#39;, &#39;pw&#39; => &#39;123456&#39;))
location 自动跳转函数,支持定义跳转的时间、消息内容,跳转地址
load_tpl 自动加载模板函数
compress_html 编译压缩html代码
shutdown_function 捕获php异常处理函数(包括die、exit、或者致命错误导致程序终止的)

framework/Class/Action.php
简易实现了action操作公用的设置变量到模板的set方法和最终渲染模板的display方法,可以根据自行需要进行扩展,所有其他action都应该继承自这个action
framework/Class/Application.php
初始化框架、包括加载相关的函数库、建立框架所需的相应文件夹等,根据需要启动安全模式进行对$_POST/$_GET/$_REQUEST/$_SERVER/$_COOKIE变量参数和值的安全检查和过滤,解析url,利用web服务的url rewrite机制进行伪静态url处理,并且设置好相应的action、method、template并且调用action的相应方法,转交控制权
framework/Class/Cache.php
实现了缓存控制、包括文件、内存缓存的统一方法、get、set、rm等操作

framework/Class/Demo.php
主要用于生成框架例子

framework/Class/Model.php
一个空的实现,您可以根据需要增加类似简化sql操作的方法实现,所有model继承此类

framework/Class/Mysql.php
利用单利模式构造的一个mysql操作类库,使用pdo方式封装彻底避免sql注入问题,其中关键是下面这个方法实现
query($sql, $data = array(), $One= false)
进行sql的值绑定方式,如果遇到insert自动返回最后插入的id值,如果是其他select操作根据需要返回一条或者全部记录数。

framework/Class/config.php
框架默认的配置文件,可以根究修改常量,重新自定义读取配置文件的位置

模板引擎说明
框架使用的模板引擎只是简单的一些正则替换、支持模板编译缓存,目前支持如下的一些模板引擎标记,包括if操作、直接赋值操作、foreach操作、loop操作、include操作,具体说明如下
直接赋值:通过在action方法中的set进行赋值到模板$this->set(&#39;val&#39;, &#39;hello world&#39;),然后模板中使用<{$val}>
if 操作:
<{if (1 == 2)}>
test if
<{/if}>
foreach / loop 操作
<{foreach ($tarr as $t)}>
<{$t}>
<{/foreach}>
<{loop ($tarr as $t)}>
<{$t}>
<{/loop}>
include操作,支持两种方式,一直是template名称和method名称一样,另一种不一样,说明如下
<{include="Index/test"}> 这里的action是Index,对应的action的方法method是test,而且模板也是test.html
<{include="Index/test/test_view"}> 这里的action是Index,对应的action的方法method是test,而且模板是test_view.html
推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
  • 本文介绍了一个免费的asp.net控件,该控件具备数据显示、录入、更新、删除等功能。它比datagrid更易用、更实用,同时具备多种功能,例如属性设置、数据排序、字段类型格式化显示、密码字段支持、图像字段上传和生成缩略图等。此外,它还提供了数据验证、日期选择器、数字选择器等功能,以及防止注入攻击、非本页提交和自动分页技术等安全性和性能优化功能。最后,该控件还支持字段值合计和数据导出功能。总之,该控件功能强大且免费,适用于asp.net开发。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
author-avatar
手机用户2502852637_666
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有