BroPHP 1.0 手册


BroPHP 1.0 手册手册手册手册 目录目录目录目录 1 简介.......................................................................................................................................................... 1 2 环境要求.................................................................................................................................................. 1 3 系统特点.................................................................................................................................................. 2 4 目录结构.................................................................................................................................................. 2 5 单一入口.................................................................................................................................................. 3 5.1 概述................................................................................................................................................... 3 5.2 编写规则........................................................................................................................................... 3 6 部署项目应用目录 .................................................................................................................................. 4 6.1 概述................................................................................................................................................... 4 6.2 部署方法........................................................................................................................................... 5 7 URL 访问 ................................................................................................................................................. 9 8 默认开启.................................................................................................................................................10 9 配置文件.................................................................................................................................................10 10 内置函数...............................................................................................................................................11 11 控制器...................................................................................................................................................12 11.1 控制器的声明(模块)................................................................................................................12 11.2 操作的声明....................................................................................................................................14 11.3 页面跳转........................................................................................................................................15 11.4 重定向............................................................................................................................................16 12 模型.......................................................................................................................................................17 12.1 BroPHP 数据库操作接口的特性 .................................................................................................17 12.2 切换数据库驱动............................................................................................................................18 12.3 声明和实例化自己定 Model 类....................................................................................................19 12.4 数据库的统一操作接口................................................................................................................21 13 视图 VIEW.............................................................................................................................................39 13.1 切换模板风格................................................................................................................................40 13.2 模板文件的声明规则....................................................................................................................40 13.3 display() 用新用法..........................................................................................................................40 13.4 在模板中可以直接使用的几个常用变量 ....................................................................................41 13.5 在服务器中可以直接使用的几个常用变量 ................................................................................41 14 自动验证...............................................................................................................................................42 15 缓存设置...............................................................................................................................................44 16 调试模式...............................................................................................................................................45 17 内置扩展类库 .......................................................................................................................................46 17.1 分页类 Page...................................................................................................................................46 17.2 验证码类 Vcode.............................................................................................................................48 17.3 图像处理类 Image.........................................................................................................................49 17.4 文件上传类 FileUpload ................................................................................................................50 18 自定义扩展函数库 ...............................................................................................................................51 19 自定义扩展类库 ...................................................................................................................................51 无兄弟,不编程! www.lampbrother.net 易第优教育(LAMP 兄弟连) - 1 - 1 简介简介简介简介 BroPHP(1.0) 是一是一是一是一个免费开源的个免费开源的个免费开源的个免费开源的轻量级轻量级轻量级轻量级 PHPPHPPHPPHP 框架框架框架框架,,,,允许允许允许允许你你你你把把把把基于基于基于基于 BroPHP 框架框架框架框架开发的应用开发的应用开发的应用开发的应用去去去去 开源或开源或开源或开源或是是是是商业产品发布商业产品发布商业产品发布商业产品发布或或或或销售销售销售销售。。。。BroPHPBroPHPBroPHPBroPHP 框架完全框架完全框架完全框架完全采用面向对象的设计思想采用面向对象的设计思想采用面向对象的设计思想采用面向对象的设计思想,,,,并且是基于并且是基于并且是基于并且是基于 MVC 的三层设计模式的三层设计模式的三层设计模式的三层设计模式。。。。具有部署和应用具有部署和应用具有部署和应用具有部署和应用及为及为及为及为简单简单简单简单、、、、效率高效率高效率高效率高、、、、速度快速度快速度快速度快,,,,扩展性和可维护性都很好扩展性和可维护性都很好扩展性和可维护性都很好扩展性和可维护性都很好等特等特等特等特 点点点点,,,,可以稳定的用于商业及门户的开发可以稳定的用于商业及门户的开发可以稳定的用于商业及门户的开发可以稳定的用于商业及门户的开发。。。。(单服务器的 PHP 项目大约当前所有网站数量的 80%, 都可以使用 BroPHP 框架开发)BroPHP 框架包括单入口文件、MVC 模式、目录组织结构、类自 动加载、强大基础类、URL 处理、输入处理、错误处理、缓存机制、扩展类等功能。是专门为 《细说 PHP》的读者及 LAMP 兄弟连全体学员提供的“学习型 PHP 框架”。当然任何 PHP 应用 开发爱好者都可以从 BroPHP 框架的简单和快速的特性中受益。另外,BroPHP 框架的应用不仅 使WEB 开发变得更简单、更快捷,最主要的目的是让 PHP 学习者,通过使用本框架从而去了解 PHP 框架、再去研究框架,最后达到开发自己框架的目的。 可以到 http://www.brophp.com 和 http://bbs.lampbrother.net(LAMP 兄弟连)中下载 BroPHP 框架最新版本和最新的帮助文档。 LAMP 兄弟连兄弟连兄弟连兄弟连:::: 2 环境要求环境要求环境要求环境要求 操作系统操作系统操作系统操作系统:::: 支持 Linux/Windows 服务器,可以跨平台应用 WEBWEBWEBWEB 服务器服务器服务器服务器:::: 可运行于 Apache 、IIS 和 nginx 中 PHP 环境环境环境环境:::: PHP5.0 以上版本,需要安装 XML、mysqli 、PDO、GD、Memcache 扩展模块 PHP 新手推荐使用集成开发环境 AppServ 对 BroPHP 进行本地开发和测试 无兄弟,不编程! www.lampbrother.net 易第优教育(LAMP 兄弟连) - 2 - 3 系统特点系统特点系统特点系统特点 BroPHP 是“学习型”的超轻量级框架(文件很小,对 CPU 和内存消耗极低),虽然功能不算很 多,但具备了一个框架构成最少应该有的全部功能(包括:MVC 模式、目录组织结构、类自动加载、基 类、URL 处理、输入处理、错误处理、扩展类等)。 本框架在已有的功能上,不管从组织结构上,还是 从代码质量上,以及运行效率上都做到了单服务器最佳的效果。使用 BroPHP 框架适合开发 BBS、电子商城、SNS、CMS、Blog 、企业门户等中小型系统。另外,本框架特别适合学习 PHP 使用,可以让你认识框架、分析框架内幕、从而达到编写自己框架的目的。并能通过框架的编 写将你零散的各个 PHP 知识点组织在一起应用,BroPHP 框架也将《细说 PHP》中各章节知识点 整合了起来。在分析框架源码时,PHP 的技术点可以参考《细说 PHP》各章节。BroPHP 框架部 分特点如下: 1. 第一次访问时为用户自动创建了项目所需要的全部目录结构,用户无需在对组织项目的目 录结构而烦恼。 2. 本框架采用模块和操作的方式来执行,简单易用,功能适中,更符合中国 WEB 程序员的开 发习惯 3. 通过本框架编写的项目是完全采用 PHP 面向对象的思想,符合人类的思维模式,具有独立 性、通用性、灵活性,有利于对项目的维护和调试。 4. 基于 MVC 的开发模式,将视图层和业务层的分离,达到快速的部署,具有很好的可维护 性,以及高重用性和可适用性,特别有利于软件工程化管理。 5. 内建丰富的 SQL 查询机制,操作灵活,简单易用。 6. 采用了目前业界最著名的 PHP 模板引擎 Smarty, 对于 Smarty 熟悉的程序员具有很好的模板 开发优势。 7. 使用 Memcached 对 SQL 和 session 进行缓存,使用 Smarty 缓存技术进行页面静态化,提升 效率,减少运行消耗。 8. 框架提供一些常用的扩展类,直接使用即可完成一些常见的功能。 9. 框架支持自定义扩展类库和扩展函数的使用 10. 采用人性化的调试模式,可以快速解决项目开发时遇到的错误和异常。 11. 框架源码简单明了结构清析,方便在工作中根据当前项目的需求对框架进行改造。 4 目录结构目录结构目录结构目录结构 下例为 BroPHP 框架的系统目录,在项目开发时直接将 brophp 目录及子目录的所有文件复 制到项目根目录中即可,并不需要对这个框架源文件有任何修改,但在 Linux 操作中要注意, 将这个框架目录及子目录的权限,设置运行 PHP 的用户有读的权限即可。 |-- brophp 目录 #BroPHP 框架目录 |-- bases 目录 #BroPHP 框架基础类存放目录 |-- classes 目录 #BroPHP 框架扩展类存放目录 |-- commons 目录 #BroPHP 框架通过函数和资源存放目录 |-- libs 目录 #Smarty 模板引擎源文件存放目录 无兄弟,不编程! www.lampbrother.net 易第优教育(LAMP 兄弟连) - 3 - |-- brophp.php 文件 #BroPHP 框架的公共入口文件 5 单一入口单一入口单一入口单一入口 5.1 概述概述概述概述 在使用 PHP 过程化编程时,每个 PHP 文件都能独立访问并运行,就像一个体育场有多个入 口一样,需要在每个入口都要检票和安全检查。而采用单一入口模式进行项目部署和访问,无 论完成什么功能,一个项目只有一个统一(但不一定是唯一)的入口,就像一个体育场如果只 能从一个入口入场(程序是抽象的,一个入口和多个入口效率是一样的)控制起来则更灵活, 几乎没有什么缺点。使用主入口文件部署项目的优点如下:  加载文件方便加载文件方便加载文件方便加载文件方便 在编写和阅读过程化程序代码时,经常会遇到文件之间互相包含,其中包括 PHP 使用 include 包括函数库和公共资源文件,也包括在 HTML 中使用 13.5 在服务器中可以直接使用的几个常用变量在服务器中可以直接使用的几个常用变量在服务器中可以直接使用的几个常用变量在服务器中可以直接使用的几个常用变量 虽然 BroPHP 框架对所有的类库和函数都是自动包含的,但如果需要在控制器或模型中加载 自定义加 PHP 某个文件,可以通过 PROJECT_PATH 和 APP_PATH 两个路径完成。如下所示:  PROJECT_PATH // 代表项目所在的根路径,即与框架所在的目录同级  APP_PATH // 代表项目中当前应用目录(在入口文件中指定的路径) 另外,除了在模板文件中可以直接使用<{$root}> 、<{$app}> 、<{$url}> 、<{$public}> 、<{$res}> 等路径。如果不是使用模板文件,而是在 PHP 中直接去访问前台文件(js 、CSS、HTML、图片等), 则可以使用 BroPHP 框架中的几个常量或几个全局$GLOBALS 变量,都是从 WEB 服务器根目录开 始的绝对路径。如下所示:  B_ROOT 或或或或 $GLOBALS["root"] //Web 服务器根到项目的根  B_APP 或或或或 $GLOBALS["app"] // 当前应用脚本文件  B_URL 或或或或 $GLOBALS["url"] // 访问到当前模块 无兄弟,不编程! www.lampbrother.net 易第优教育(LAMP 兄弟连) - 42 -  B_PUBLIC 或或或或 $GLOBALS["public"] // 项目的全局资源目录  B_URL 或或或或 $GLOBALS["res"] // 当前应用模板的资源 还有,就是可以通过$_GET[“m”]获取当前访问的模块名,也可通过$_GET[“a”]访问当前的操 作名称。 14 自动验证自动验证自动验证自动验证 自动验证是基于 XML 方式实现的,可以对所有表单在服务器端通过 PHP 实现自动验证。如 果自己定义一个js 文件,通过处理XML 文件也可以同时实现在前台也自动使用JavaScript 验证。 使用方法是在当前应用的 models 目录下,创建一个和表名同名的 XML 文件。例如,对 bro_users 表进行自动验证,则在 models 下创建一个 users.xml 文件(一般都是对入库的数据进行 验证,而入库又发生在添加或修改数据时,所以 XML 文件名必须和表名相同才能自动处理)。文 件中的使用样例如下所示: /* 在 models 目录下,users.xml, 对添加或修改 bro_users 表的表单进行自动验证 */ users.xml 文件
在上例的 XML 文件中,最外层标记
和每个子标记 其实是可以任意命名(上例 的命名类似表单),如果不是正确的 XML 文件格式,也会在调试模式下提示。但每个 标 记中的属性名必按规范设置,也可以对同一个表单进行多次不同形式的验证(例如,年龄不能 为空和年龄必须是整数等),只要连续写几个 标记即可。属性的设置分别介绍如下所 示:  name 属性属性属性属性 该属性是必须的属性,和提交的表单项 name 属性是对应的,表示对那个表单项进行验 证。  action 属性属性属性属性 该属性是是可选的,用于设置验证的时间,可以有三个值 add( 添加数据时进行验证)、 mod( 修改数据时进行验证)、both( 添加和修改数据时都进行验证)。如果不加这个属性默认值是 both 。  msg 属性属性属性属性 该属性也是必须提供的属性,用于在验证没通过时的提示消息。 无兄弟,不编程! www.lampbrother.net 易第优教育(LAMP 兄弟连) - 43 -  value 属性属性属性属性 该属性也是可选的,不过该属性是否使用和设置的值都由 type 属性的值决定  type 属性属性属性属性 这是一个可选的属性,用于设置验证的形式,如果没有提供这个属性,默认值是“regex ” (使用正则表达式进行验证,需要在 value 的属性中给出正则表达式)。该属性可以使用的值及 使用如下所示: regex :使用正则进行验证,需要和 value 属性一起使用,在 value 中给出自定义的正则表 达式,这也是默认的方式。例如: unique :唯一性效验,检查提交过来的值,在数据表是否已经存在,例如: notnull :验证表单提交的内容是否为空。 例如,只在添加数据时验证: email : 验证是否是正确的电子邮件格式。例如: url : 验证是否是正确的 URL 格式。 例如: number :验证是否是数字格式。例如: currency :验证是否为金钱格式。例如: confirm :检查两次输入的密码是否一致,需要使用 value 属性指定另一个表单(第一个密 码字段)名称。例如: in : 检查值是否在指定范围之内,需要使用 value 属性指定范围,有多种用法。例如: 无兄弟,不编程! www.lampbrother.net 易第优教育(LAMP 兄弟连) - 44 - length: 检查值的长度是否在指定的范围之内,需要使用 value 属性指定范围,例如: callback :使用自定义的函数,通过回调的方式验证表单,需要通过 value 属性指定回调用 函数的名称。例如,使用自定义的函数 myfun 验证用户名,如下所示: 另外,如果使用 BroPHP 中提供的 Vcode 类输出验证码,只要表单中输入验证的选项名称 name 值为“code ”,并且 XML 文件存在,就会自动验证。 注意注意注意注意::::在使用框架中的添加和修改方法时在使用框架中的添加和修改方法时在使用框架中的添加和修改方法时在使用框架中的添加和修改方法时,,,,必须使用第三个参数开启自动验证必须使用第三个参数开启自动验证必须使用第三个参数开启自动验证必须使用第三个参数开启自动验证 D(“user”)->insert ($_POST, 1, 1); // 第三个参数为真值开启自动验证 D(“user”)->update ($_POST, 1, 1); // 第三个参数为真值开启自动验证 可以使用 DB 中的 getMsg() 方法获取 XML 标中的 msg 值,提示用户定义的错误报告。 15 缓存设置缓存设置缓存设置缓存设置 BroPHP 提供了两种缓存机制,可以同时使用。一种是基于 memcached 将 session 会话数据 和数据表的结果集缓存在服务器的内存中;另一种是使用 Smarty 的缓存机制静态化页面。  基于基于基于基于 memcached 缓存设置缓存设置缓存设置缓存设置 BroPHP 框架的 memcached 缓存设置比容易,只要 memcahced 服务器安装成功(可以有多 台),并为 PHP 安装好了 memcached 的扩展应用。在配置文件 config.inc.php 中设置一个或多 个 memecache 服务器地址和端口即可。BroPHP 框架就会自动将 session 信息和从数据库获取的 结果集缓存到 memecached 中,如果用户执行了添加、修改或删除等有影响表行数的操作,则 会重新将数据表的结果数据缓存。配置文件中启用 memcached 如下所示: // 使用单一 memcached 服务器 $memServers = array( "localhost", 11211 ); // 如果有多台 memcache 服务器可以使用二维数组 $memServers = array( array( "www.lampbrother.net", '11211' ), array( "www.brophp.com", '11211' ), ... ); 另外,如果 BroPHP 框架的多个项目使用同一个 memcached 服务器时,实现了独立缓存, 不会发生冲突。  基于基于基于基于 Smarty 的缓存机制的缓存机制的缓存机制的缓存机制 无兄弟,不编程! www.lampbrother.net 易第优教育(LAMP 兄弟连) - 45 - 这种缓存设置和 Smarty 的使用方式是完全一样的,在 BroPHP 框架中也是通过配置文件 config.inc.php 去设置缓存(建议在开发时关闭缓存,上线运行后开启缓存)。 // 在配置文件 config.inc.php 中开启 smarty 缓存设置 define("CSTART", 1); // 缓存开关 1 开启,0 为关闭 define("CTIME", 60*60*24*7); // 设置缓存时间 除了开启了缓存设置以外,还需要在控制器类中有些设置,同 Smarty 的用户一样,如下所 示:。 /* * 定义一个控制器类 User */ Class User { // 控制器中默认方法 function index (){ // 如果有缓存则不再去连接数据库和执行 SQL 查询 if(! $this->is_cached (null,$_SERVER["REQUEST_URI"])){ // 连接了数据库,读取表的数据 $user= D(“users”); $this->assign (“data”, $user->select ()); } $this->display (null, $_SERVER["REQUEST_URI"]); } } 也可以使用<{nocache}><{/nocache}> 设置局部不去缓存,这个 Smarty 块函数插件在 BroPHP 框架中已经设置好了,可以直接使用。 16 调试模式调试模式调试模式调试模式 调试模式是为程序员在开发阶段提供的帮助功能,在项目上线运行后将其关闭即可。关闭 和开启调试模式非常简单,只要在配置文件 config.inc.php 中设置“DEBUG”选项的值即可(上 线后使用 0 值关闭,开发时使用 1 值开启)。如果在上线运行后,关闭了调试模式则会将运行 中产生的异常写到 runtime 目录下的 error_log 文件中,这样在运行后也可以通过查看这个文件 对项目进行维护。调试模式中可供参考的信息包括:脚本运行时间、自动包含的类、运行中的 异常、一些常见的提示、使用的 SQL 语句和表结构等, 可以通过关闭按钮临时关闭掉输出的 提示框。调试框的界面如下所示: 无兄弟,不编程! www.lampbrother.net 易第优教育(LAMP 兄弟连) - 46 - 如果在开发阶段,某个操作的视图中不想使用调试模式中的输出,则可以在操作中加上一 个开关(使用函数 debug(0)或 debug() ,也可以使用$GLOBALS["debug"]=0 )就不会输出提示界面 了。如下所示: /* * 定义一个控制器类 Index */ Class Index { // 控制器中默认方法 function index (){ // 关闭调试模式的输出,或$GLOBALS["debug"]=0; debug( 0 ); } } 17 内置扩展类库内置扩展类库内置扩展类库内置扩展类库 BroPHP 内置了几个常用的扩展类,不用需要任何改动直接就可以使用,包括文件上传、图 像处理、分页和验证码 4 个类。分别介绍如下所示: 17.1 分页类分页类分页类分页类 Page 分页功能在每个项目中都是很常见,该类的构造方法中有四个参数: 第一个参数是必须的,提供数据表需要显示的总记录数; 第二个参数是可选的,提供每页需要显示的记录总数,默认为 25 条; 第三个参数也是可选的,用来向下个页面提供本页中的数据。 第四个参数也是可选的,用来设置默认页,需要一个布尔值,默认为 true, 如果为 true 值 则默认显示第一页,如果使用 false 值则默认页为最后一页。 使用的方式如下所示: /* * 定义一个控制器类 User */ 无兄弟,不编程! www.lampbrother.net 易第优教育(LAMP 兄弟连) - 47 - Class User { // 控制器中默认方法 function index (){ // 创建用户对象 $user=D("users"); // 创建分页对象, 第页显示 5 条数据 $page=new Page( $user->total(), 5 ); // 获取每页数据 $data=$user->limit( $page->limit )->select(); // 将数据分配给模板 $this->assign("data", $data); // 分配分页内容给模板 $this->assign("fpage", $page->fpage() ); // 显示输出模板 $this->display(); } } 输出结果如下所示:  设置输出形式设置输出形式设置输出形式设置输出形式 如果想自定义输出分页信息,也可以通过分页对象中的 set() 方法连贯操作进行设置, 可以设置一个也可以单独或连续设置多个(设置的值都可以使用图片)。使用方式如下: $page->set("head", " 条图片条图片条图片条图片") ->set("first", "|<") ->set("last", ">|") ->set("prev", "|<<") ->set("next", ">>|"); 输出结果如下所示:  设置输出内容设置输出内容设置输出内容设置输出内容 如果只需要在输出结果中显示自己定义内容,也可以通过 Page 类中的fpage() 方法的参数指 定。在输出的结果中共有 8 部分给成,可以通过在 fpage() 的参数中传入“0-7”之间的整数自定 义输出内容和输出的顺序。fpage() 的方法使用如下所示: $this->assign("fpage", $page->fpage(4,5,6,0,3)); 输出结果如下所示:  附加资源附加资源附加资源附加资源 如果从当前页需要转到下一页时,将本页的一些数据也带到下一个页面中去,就可以在创 建 Page 对象时,通过设置第三个参数完成。例如,当前是分类 cid=5 下面的数据分页,转到下 无兄弟,不编程! www.lampbrother.net 易第优教育(LAMP 兄弟连) - 48 - 页时也要是 cid=5 类别下的数据。创建分页对象如下所示(可以传更多的数据过去,只要使用 PATHINFO 的格式): $page=new Page($total, NUM, “cid/5”);  可以获取的属性可以获取的属性可以获取的属性可以获取的属性 可以从分页对象中获取两个属性的值,一个是分页使用的 limit ,另一个则是当前的正在访 问的页面: $page->limit; // 用于用于用于用于 SQL 语句中语句中语句中语句中 $page->page; // 获取当前的分页数获取当前的分页数获取当前的分页数获取当前的分页数 17.2 验证码类验证码类验证码类验证码类 Vcode 验证码也是在每个项目中都是很常见,用于限制“人”操作而非机器,该类的构造方法中 有三个参数:第一个参数是验证码图片的宽度,默认值是 80 像素;第二个参数是验证码图片 的高度,默认值是 20 像素;第三个参数是设置验证码的个数,默认值是 4 个。使用非常简单, 只要在控制中声明一个方法,并在这个方法中创建对象后直接输出,然后在表单中使用 的 src 指定这个操作方法即可输出验证码。(注意:表单 name 名称为“code ”)如下所法: /* * 定义一个控制器类 User */ Class User { // 控制器中默认方法 function code (){ // 直接输出验证码对象 echo new Vcode(); // 或 echo new Vcode(100, 25, 5); 使用参数设置验证码 // 或 echo new Vcode(120, 25, 6); 使用参数设置验证码 } } 在表单中使用方法 // 在表单中使用验证码, <{$url}>/code 访问上例的 code() 操作,获取图片 /code ” > 如果看不清可以点击图片换一张,或让用户感觉不区分大小写,可以使用JavaScript 完成。 如下所示: // 在表单中使用验证码,加上 js 事件 无兄弟,不编程! www.lampbrother.net 易第优教育(LAMP 兄弟连) - 49 - /code” onclick=”this.src=’<{$url}>/code/’+Math.random()”> 输出结果: 如果使用 BroPHP 自动验证,则只要 XML 文件存在,则会自动检查验证码(输出表单名称 必须为“code ”, 因为在服务器中是使用$_SESSION[“code”]保存的验证码,并且在自动验证中 也是使用 code 调用的函数) 17.3 图像处理类图像处理类图像处理类图像处理类 Image 在项目开发时经常需要对上传的图片内容进行优化,最常见的操作是对图片进行缩放和加 水印,本类提供了这两个功能。和前两个类的用法相似,只要创建对象后调用 thumb() 方法对 图片进行缩放,而调用 waterMark() 方法可以为图片加水印(目前支持:gif,jpeg,png 等图片格 式)。如下所示:  构造方法构造方法构造方法构造方法 该方法用来创建图像对象,参数是可选的,用来指定处理图片的位置,默认处理图片的目 录是与框架在同级目录下的 public/uploads/ 目录下,可以自己定义目录位置。  thumb() 方法方法方法方法 该方法用来对图像进行缩放,需要 4 个参数,其中最后一个参数是可选的,缩放成功后返 回图片的名称,如果缩放失败则返回 false 。参数说明如下: 第一个参数:是需要处理的图片名称(图片所在位置由构造方法决定) 第二个参数:图片需要缩放的宽度 第三个参数:图片需要缩放的高度 第四个参数:是可选的,指定缩放后图片新名的前缀, 默认值为”th_” // 例如,创建图像类对象后,将图片 brophp.gif 缩放至 300 x 3000, 加上 th_ 前缀名 $img=new Image(); // 创建图片对象 $imgname=$img->thumb(“brophp.gif”, 300, 300, “th_”); // 缩放图片  waterMark(); 该方法用来为图像添加水印(只支持图片水印),也需要 4 个参数,其中最后一个参数也 是可选的,成功后返回新图片的名称,如果失败则返回 false 。参数说明如下: 第一个参数:背景图片,即需要加水印的图片(图片所在位置也由构造方法决定) 第二个参数:图片水印,即作为水印的图片(图片所在位置也由构造方法决定) 第三个参数:水印图片在背景图片上添加的位置,共有 10 种状态,0 为随机位置 1 为顶端居左,2 为顶端居中,3 为顶端居右; 4 为中部居左,5 为中部居中,6 为中部居右; 7 为底端居左,8 为底端居中,9 为底端居右; 第四个参数:是可选的,指图片新名的前缀,默认值为”wa_” // 例如,创建图像类对象后,将图片 brophp.gif 加上水印 php.gif 无兄弟,不编程! www.lampbrother.net 易第优教育(LAMP 兄弟连) - 50 - $img=new Image(); // 创建图片对象 $imgname=$img->waterMark(“brophp.gif”, “php.gif”, 5, “wa_”); // 加水印 17.4 文件上传类文件上传类文件上传类文件上传类 FileUpload 文件上传也是开发项目时常见的功能,本类支持单个文件上传,也支持多个文件上传。另 外,如果上传的是图片还可以直接进行缩放和加水印的操作。也支持设置文件上传的尺寸和上 传文件的类型。如下所示: /* * 定义一个控制器类 User */ Class User { // 控制器中添加用户的方法 function add (){ $user=D(“users”); $_POST[“picname”]=$this->upload(); $user->insert(); } // 文件上传方法 Private function upload (){ $up = new FileUpload(); // 可以通过参数指定上传位置,可通过 set() 方法 if($up->upload(“pic”)) { //pic 为上传表单的名称 return $up->getFileName(); // 返回上传后的文件名 }else{ // 如果上传失败提示出错原因 $this->error($up->getErrorMsg(), 0, ‘index’); } } } 在 FileUpload 类中有几个可以使用的方法:创建对象以后,通过 upload() 方法上传文件,参 数为的 name 值。如果上传成功可以通过该对象中的 getFileName() 方法获取上传的文件(默认为随机文件名,可以设置)。如果上传失败可以通过 getErrorMsg() 方法获取出错信息。还可以通过 set() 方法进行连贯操作,限制上传文件的尺寸、类型和是否启 用随机文件名,也可以通过 set() 方法对上传的图片缩放和加水印。如下所示: Private function upload (){ $up = new FileUpload(); // 可以通过参数指定上传位置,可通过 set() 方法 $up->set(“path”, “/usr/www/uploads/”) // 设置上传位置 ->set(“maxSize”, 1000000) // 设置上传大小,单位字节 // 设置允许上传的类型 ->set(“allowType”, array(“gif”, “jpg”, “png”)) // 设置启用上传后随机文件名,true 启用(默认), false 使用原文件名 ->set(“israndname”, true) // 设置上传图片的缩放大小,还可以通过 prefix 指定新名前缀 ->set(“thumb”, array(“width”=>300, “height”=>”200”)) 无兄弟,不编程! www.lampbrother.net 易第优教育(LAMP 兄弟连) - 51 - // 设置为上传图片加水印,也可以通过 prefix 指定新名前缀 ->set(“watermark”, array(“water”=>”php.gif”, “position”=>5)) if($up->upload(“pic”)) { //pic 为上传表单的名称 return $up->getFileName(); // 返回上传后的文件名 }else{ // 如果上传失败提示出错原因 $this->error($up->getErrorMsg(), 0, ‘index’); } } 如果是多个文件一起上传 getFileName() 返回一个数组,数组是多个上传成功的图片名。如 果上传失败 getErrorMsg() 方法,返回一个多个出错信息数组。 18 自定义扩展函数库自定义扩展函数库自定义扩展函数库自定义扩展函数库 使用 BroPHP 框架除了自定义控制器类和业务模型类,还可以自定一些扩展功能类,只要 将类声明在 classes 目录下(以.class.php 为后缀名,类名全部小写), 并以类名作为文件名, 一个文件中存放一个类。如果按这些规范编写,则所有在这个目录下编写的类会被 BroPHP 框 架用到时类时自动加载, 在任何位置都可以直接创建对象使用(包括静态方法的使用)。 19 自定义扩展类库自定义扩展类库自定义扩展类库自定义扩展类库 如果一个很小的功能,就不需要通过编写一个类去完成,只要一个小函数就可以搞定, BroPHP 框架也提供了自定义函数的位置。只要将自定义的功能函数编写在 commons 目录下的 functions.inc.php 文件中,则在任何位置都可以直接调用。
还剩51页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

kevinlou

贡献于2012-11-05

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf