存档

‘PHP’ 分类的存档

一个简单好用的缩略图类

2009年9月12日

这个缩略图生成类是根据从 PHPCMS 挖出来的相关函数简单修改而来的。自觉使用起来挺方便的,呵呵。

用法也简单,范例如下:

$thumb = new thumb(str_replace("\\","/",dirname(__FILE__))."/"); \\定义根物理路径
$thumb->get('images/107.jpg'); \\输入图片路径生成缩略图并返回缩略图路径

以上写法也可以改成

$thumb = new thumb();
$thumb->get('E:/htdocs/magki/include/images/107.jpg');

不过前一种返回的是缩略图的相对路径,而后一种是返回缩略图的绝对物理路径。

缩略图的命名只定义了三个标签如下:

%maxwidth% get 方法中所定义的缩略图的最大宽度,默认 100
%maxheight% get 方法中所定义的缩略图的最大高度,默认 100
%basename% 所要生成缩略图的原图文件名

类中默认使用的缩略图命名是 thumb_%maxwidth%_%maxheight%_%basename% 像上面范例中所生成的缩略图命名就是根据默认来生成的,所得到的缩略图文件名为 thumb_100_100_107.jpg。有需要的可以自己扩展更多的缩略图命名标签。

另外,这个类的 get 方法还有一个参数是 autocut,如果赋值为 1 (默认值)则如果原图高宽比例和所指定的缩略图高宽比例不一致则会进行裁剪而非变形拉伸。

阅读全文...

PHP

给 PHPCMS 添加删除栏目的代码做优化

2009年8月11日

最近几个单都是用 PHPCMS 做二次开发,包括现在正在进行的这个大单,有多大?给客户添数据后,光是栏目数就已经设置到3000+并且上升势头不减……

以前没遇到过一个网站有那么多栏目的情况,估计 PHPCMS 的开发人员也没遇到过,因为我发现栏目越多,添加和修改栏目的速度越慢,栏目数过1000的时候,基本修改一次栏目就得花上1分钟时间,现在 3000+ 栏目已经要4,5分钟了……查阅了下 PHPCMS 的代码发现了问题所在。

PHPCMS 的栏目相关处理方法都是在 include\admin\category.class.php 里,这个类文件中有一个被频繁使用的方法 repair,问题就出在这里。无论是添加、删除还是其他的一些栏目操作,大多都会执行一次这个方法(有个地方连续执行两次,不解,应该是开发人员的失误)。而这个方法的主要工作就是将整个站的所有栏目遍历一次遍,对每个栏目都更新一下 arrparentid, parentdir, arrchildid 三个字段的内容。妈妈呀,那3000多个栏目岂不是要执行3000多次 update?怪不得……

阅读全文...

PHP

FleaPHP 表关联学习笔记

2009年4月22日

HAS_ONE:当前表的每一条记录都拥有最多一条(0–1)关联记录
HAS_MANY:当前表的每一条记录都拥有多条(0-n)关联记录
MANY_TO_MANY:当前表的每一条记录都和其他表的多条(0-n)记录关联
BELONGS_TO:当前表的每一条记录都属于另一个表的某条记录

关联中必须设置的属性为:
'name',          // 关联的名字(如:hasOne、hasMany)
'tableClass',          // 关联的表数据入口对象名
'mappingName',          // 字段映射名

可选属性:
'foreignKey',          //外键字段名
'sort',          //对关联表进行查询时使用的排序参数
'conditions',          //对关联表进行查询时使用的条件参数
'fields',          //对关联表进行查询时要获取的关联表字段
'limit',          //对关联表进行查询时限制查出的记录数
'enabled',          //是否处理关联,设置为falses时,不处理该表入口的任何关联。enabled 的优先级高于 linkRead、linkCreate、linkUpdate 和 linkRemove。
'countOnly',          //指示在查询关联表时是否仅仅统计记录数,而不实际查询数据
'counterCache',          //将关联记录总数缓存到指定的字段,数据表中要建立相应的字段
'linkRead',          //指示是否在主表读取记录时也读取该关联对应的关联表的记录,默认ture
'linkCreate',          //指示是否在主表创建记录时也创建该关联对应的关联表的记录,默认ture
'linkUpdate',          //指示是否在主表更新记录时也更新该关联对应的关联表的记录,默认ture
'linkRemove',          //指示是否在主表删除记录时也删除该关联对应的关联表的记录,默认ture
'linkRemoveFillValue',          //当删除主表记录而不删除关联表记录时,用什么值填充关联表记录的外键字段,默认0
'saveAssocMethod',          //指示当保存关联数据时,采用何种方法,默认为 save,可以设置为 create、update 或 replace

关联:一个关联是一个关系,这个关系属于某一个数据表。例如 users 表可能就拥有一个或者多个关联。
主表:对于一个关联,拥有该关联的数据表就是主表。例如 posts 表定义了一个 MANY_TO_MANY 关联。那么在这里(指这个关联),posts 就是主表。
关联表:在一个关联中,关联表就是除主表外的另一个表。
外键:在数据库原理中,外键的含义很复杂。但在 FleaPHP 框架中的数据库关联功能中,外键泛指一个记录中用于关联另一个记录的字段。例如 profile 表中的 user_id 字段就是用于关联 users 表的字段。这个 user_id 字段就是一个外键。
中间表:在 MANY_TO_MANY 关联中,除了主表和关联表,还需要另一个表来保存这两个表的记录之间的互相关联关系。这个表称为中间表。

PHP

phpDoc 注释的一点说明

2009年2月3日

PHP 编程最好能做好各种注释,不管是用 IDE 还是编辑器进行代码编写,良好的注释总能给予极大的帮助。对于 phpDoc 注释的用法这里做点简单的说明。

/**
* @name  名字
* @abstract  申明变量/类/方法
* @access  指明这个变量、类、函数/方法的存取权限
* @author  函数作者的名字和邮箱地址
* @category  组织packages
* @copyright  指明版权信息
* @const  指明常量
* @deprecate  指明不推荐或者是废弃的信息
* @example  示例
* @exclude  指明当前的注释将不进行分析,不出现在文挡中
* @final  指明这是一个最终的类、方法、属性,禁止派生、修改。
* @global  指明在此函数中引用的全局变量
* @include  指明包含的文件的信息
* @link  定义在线连接
* @module  定义归属的模块信息
* @modulegroup  定义归属的模块组
* @package  定义归属的包的信息
* @param  定义函数或者方法的参数信息
* @return  定义函数或者方法的返回信息
* @see  定义需要参考的函数、变量,并加入相应的超级连接。
* @since  指明该api函数或者方法是从哪个版本开始引入的
* @static  指明变量、类、函数是静态的。
* @throws  指明此函数可能抛出的错误异常,极其发生的情况
* @todo  指明应该改进或没有实现的地方
* @var  定义说明变量/属性。
* @version  定义版本信息
*/

PHP