分类 代码人生 下的文章

spl_autoload_register、set_exception_handler和set_error_handler、get_include_path等。

spl_autoload_register

__autoload函数一样,但是更灵活。他的功能是当程序找不到当前正在使用的类时,在报错前,会调用此函数,如果找到了,就继续工作。

set_exception_handler

接管了原本的异常处理,可以隐藏或者美化输出,可以用throw new Exception触发。

set_error_handler

同上,接管了错误处理。可以用trigger_error触发。

这篇文章于昨日早在215路早读时看到,写的很不错!可以作为学习框架或者写自己的框架之前的读物。

ps.文章中提到了一个名词——控制反转。这个词可能经常会考倒刚入门程序员。控制反转其实其实是一种外包的思想,将总做交给各个领域的'专家'去做,而你只负责如何调度他们的工作。明确的分工会给系统带来很多维护上的便利。这个概念常常和依赖注入同时出现,而什么是依赖注入呢?其实他是控制反转的一个实现方式。

如果你对框架这个概念还不是很理解,那么还可以参考一下老高的系列文章THINKPHP框架解析,老高带你深入框架内部,去看看框架到底做了什么,和为什么这么做。希望这篇转帖和老高的文章能够帮助你深入理解框架的作用。

阅读剩余部分

老高在一个新环境中装DEDECMS的时候发现后台验证码无法显示。直接搜索一下这个错误,有人说session错误,有的说权限错误等等,这不胡扯么!只能看源代码了,定位到文件/include/vdimgck.php。出错的函数是imagettftext(),由于织梦使用了@将错误隐去,导致这次莫名的错误。将@去掉,错误立马出现:

Fatal error: Call to undefined function imagettftext()

现在我们就明确了,出现错误的原因是PHP编译时没有加上FreeType

解决办法:

首先编译安装FreeType,以2.4.0为例:

wget http://download.savannah.gnu.org/releases/freetype/freetype-2.4.0.tar.bz2
tar -jxf freetype-2.4.0.tar.bz2
cd reetype-2.4.0
# 安装到/usr/local/freetype
./configure --prefix=/usr/local/freetype
make && make install

下面我们重新编译PHP,加上参数--with-freetype-dir=/usr/local/freetype

./configure \
... \
... \
--with-freetype-dir=/usr/local/freetype

编译完成重启php

kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`

再GD库中找到FreeType Support说明安装成功!

需要注意的是,如果服务器freetype的版本是1.*,那么你可能需要改变编译参数为--with-ttf[=DIR],以下转自ChinaUnix论坛:

字库 配置开关 FreeType 1.x 要激活 FreeType 1.x 的支持,加上 --with-ttf[=DIR]。
FreeType 2 要激活 FreeType 2 的支持,加上 --with-freetype-dir=DIR。
T1lib 要激活 T1lib(Type 1 字体),加上 --with-t1lib[=DIR]。
本地 TrueType 字符串函数 要激活本地 TrueType 字符串函数的支持,加上 --enable-gd-native-ttf。

参考:

http://bbs.chinaunix.net/thread-610205-1-1.html

钩子概念对初学者来说可能比较抽象难懂,但是只要掌握了他的工作方式,那么自己动手写一个钩子机制也不难。

Hook这个词很有意思,以下引用自某网络词典:

Hook用作名词时意思是“钩”,转化为动词时可表示把某物弯成钩形,也可表示用弯曲的东西把某物体钩住,引申可表示为“吊”“挂”等。

作为一个程序猿,老高对钩子的解释是,他就是一个触发机制,把你的软件功能想象成一个陷阱,放到##系统流程##可能经过的路上,如果陷阱被系统踩到,就会执行你的程序,当你挂载的钩子执行完后,系统会根据你的程序的结果继续运行。

老高最早接触Hook的编程思想是源于windows,当时打dota很入迷,突然想研究一下改键的原理,于是发现了系统钩子这一说法。

改键的原理,简单地说来就是拦截系统按下键盘时的默认动作,如果需要把小键盘的7映射到Q上,就在拦截时做一个判断,如果的键码是小键盘7,就改为Q的键码,最后发送给系统修改后的键码,即完成了改键操作。

钩子机制的使用在很多系统上都有体现,如windows、wordpress、thinkphp等,由钩子实现的功能在wordpress中叫做插件,在TP中叫做行为。

阅读剩余部分