PEAR简介:用PEAR来写你的下一个php程序

2001 年 6 月 01 日

你可能已经是个PHP的老手了,写了很多非常棒的代码。但是,如果你现在要把它们加入到你现在的项目中去,是否有些吃力?你的朋友想使用你的代码作为他的项目中的一个模块,但是你发现你们使用了截然不同的编码风格,让他适应,甚至不如重写一个!

请跟我来,使用PEAR标准编写你的PHP程序吧,你的程序将会拥有更大的活力,你的程序和代码将会很方便地和其他高手的代码融合在一起,PEAR就象CPAN对于PERL一样,会让PHP产生更高的能量。

什么是PEAR

PEAR是PHP扩展与应用库(the PHP Extension and Application Repository)的缩写。它是一个PHP扩展及应用的一个代码仓库,简单地说,PEAR就是PHP的CPAN。

 


回页首

为什么要使用PEAR?

PHP是一个非常优秀的脚本语言,简洁、高效,随着4.0的发布,越来越多的人使用它来进行动态网站的开发,可以说,PHP已经成为最优秀的INTERNET开发语言之一,尤其对于那些需要能够快速、高效地开发中小规模的商业应用的网站开发人员,PHP是其首选的语言。但是随着PHP的应用的不断增多,对于这些应用缺乏统一的标准和有效的管理,因此,PHP社区很难象PERL社区的人们那样方便的共享彼此的代码和应用,因为PHP缺乏象CPAN那样的统一的代码库来分类管理应用的代码模块(熟悉PERL的人都知道,CPAN是一个巨大的PERL的扩展模块仓库,编写的应用模块可以放在CPAN下面的适当的分类目录下面,其他的人可以很方便地复用,当然,你编写应用模块时候也需要遵守其中的准则。)

为此,PEAR就应运而生了,并且从4.04开始,随着PHP核心一起被分发。

 


回页首

PEAR能给我带来什么好处?

1.如前所述,PEAR按照一定的分类来管理PEAR应用代码库,你的PEAR代码可以组织到其中适当的目录中,其他的人可以方便地检索并分享到你的成果。

2.PEAR不仅仅是一个代码仓库,它同时也是一个标准,使用这个标准来书写你的PHP代码,将会增强你的程序的可读性,复用性,减少出错的几率。

3.PEAR通过提供2个类为你搭建了一个框架,实现了诸如析构函数,错误捕获功能,你通过继承就可以使用这些功能。

  Click to continue »

Tags:, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , .

用 Zend Studio 消灭 PHP 应用程序中的 bug–聪明的 IDE 帮助您以交互方式发现并修复 bug

2007 年 11 月 26 日

调试器 是一种特殊的应用程序,它们可以探测正在运行的代码,允许任意地暂停执行、检查对象、检查调用堆栈,甚至在运行时修改变量的值。学习如何使用调试器纠正 PHP 代码中的 bug。

根据一个广为流传的传说,第一个计算机 bug 是一只真正的虫子,它出现在 Harvard University 测试的 Mark II Aiken Relay Calculator 中的一个继电器上。根据操作员在 1947 年 9 月 9 日所做的日志记录,这只虫子是 “(在计算机中)发现的第一个 bug”。在图 1 中可以看到这份手写的日志记录和这只声名狼籍的虫子。
图 1. 声名狼籍的 Mark II 虫子
声名狼籍的 Mark II 虫子
实际上,bug 这个词的起源要早得多,可能比前面这次事件早了大约七十年。在 1848 年,Thomas Edison 在描述机械故障时写道,“首先是觉得有点儿不对劲儿,然后是一声爆响,接着麻烦就来了 —— 机器不正常了,出现了小故障和各种麻烦等 ‘bug’…” 显然,与 Edison 同时代的人已经把 bug 这个词当作行话了。

了解到即使是 Edison 也必须对其发明进行 “调试(debug)”,软件开发人员可能会觉得有所慰藉并受到鼓舞(Edison 没有用过 debug 这个词。这个词比较新,它是在二战时期从航空工业开始成为工程师的行话的)。或者,您可能希望所有的 bug 都是真正的虫子,那倒好办了,我们只需安装一个捕虫器就行了。“计算机 bug 进得来,但是出不去。”(有人能在 Subversion 的下一版中增加这个特性吗?)

但是,正如 Edison 所指出的,bug 是每个工程项目的固有部分。在讨论发明时,Edison 写道,“必须经过数月的艰苦观察、研究和劳动,才能让产品经受市场的考验。”

幸运的是,软件开发人员可以利用工具简化 “观察” 的过程,将花费的时间从几个月减少到几分钟,至少减少到几小时或几天。以前的一篇文章 “Squash bugs in PHP applications with Xdebug” 介绍了收集分析故障原因所需的信息的各种技术。但是,这种故障后分析往往很困难,而且很耗费时间,因为必须做出推测,然后进行测试。如果缺少关键的信息,那么必须反复研究、调整和测试代码,这个过程可能要重复许多次。

本文讨论一种更高效的调试技术:交互式调试(interactive debug)。有一种称为调试器(debugger) 的特殊应用程序,它们可以探测正在运行的代码,允许在任意的断点暂停执行,检查对象、检查调用堆栈和环境,甚至允许在运行时修改变量的值。

在本文中,将使用 Zend Debugger;它是 Zend 引擎的一个扩展,可以探察正在运行的 PHP 应用程序。可以免费下载并使用 Zend Debugger。但是,为了控制 Zend Debugger 和查看它的诊断信息,需要同时使用一个客户机应用程序。客户机可以是从命令行运行的简单程序,也可以是成熟的集成开发环境(IDE),提供编辑器、代码补全、图形化类浏览器等特性。

有好几种开放源码客户机可以与 Zend Debugger 进行交互,包括开放源码的 PHP Eclipse 插件。但是,我喜欢的 PHP IDE 是由 Zend Technologies 提供的 Zend Studio,这家公司同时提供 PHP 运行时引擎的开放源码版本和商业版本。与 PHP 本身不同,Zend Studio 是一个商业产品。可以下载这个软件并免费使用 30 天,这段时间足够您体会它的众多特性了;但是在此之后,如果希望继续使用它,就必须购买许可证。对于我来说,许可证的费用绝对物有所值。

您应该试试各种客户机,寻找适合自己的软件。例如,许多 IDE 包含您喜欢的编辑器,这样就不需要重新学习一套键盘快捷键。无论选择哪种软件,当您开始使用调试器客户机之后,很可能会发现再也离不开它了。您可以和 print_r() 说再见了!

Click to continue »

Tags:, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , .

用 PHP 构建自定义搜索引擎(全文检索,搜索)

2007 年 9 月 10 日

虽然 Google 及其系列产品几乎无所不能,但是 Web 形式的强大搜索引擎并不能很好地适用于每个站点。如果站点内容已被高度专业化或已明确分类,那就需要使用 Sphinx 和 PHP 来创建一个优化的本地搜索系统。

在 Internet 时代,人们希望信息能够像快餐一样被打包起来:能够快速无障碍使用,并且分为很小的单位(或者是以字节 大小为单位?)。实际上,为了满足急躁而又渴求信息的用户的需求,甚至最普通的 Web 站点现在都要求具有快速浏览样式的各种菜单:

  • RSS 是比萨快递员,会把新鲜出炉的比萨送上门。
  • 网络日志是当地的中餐馆,为您献上喜爱的风味菜肴。
  • 论坛是家常便饭(或者可能更恰当地说,“动物屋” 中抢夺食物的场景)。
  • 而搜索就像在当地的餐厅吃自助晚餐一样:不断将想吃的食物填满盘子就行,只要您的食道 —— 还有您的椅子 —— 撑得住。

幸运的是,PHP 开发人员可以找到各种 RSS、blog 和论坛软件来创建或者改进站点。而且,虽然 Google 和其他搜索站点几乎无所不能并且执行过滤通信,但是搜索引擎并不一定会良好地适应各个站点。

例如,如果 Web 站点提供成百上千的全新和翻新的保时捷汽车零件,Google 可能通过诸如 “Carrera parts” 之类的广义搜索找到您的站点,但是对于更具体的 “used 1991 Porsche 911 Targa headlight bezel” 查询,它可能不会得到精确结果。

如果站点内容高度专业化,或者访问者期望搜索功能与现实工作流类似,那么最好在 Web 的全局搜索引擎基础上增加一个为您的站点量身定做的本地搜索系统(有关专业化搜索的更多实例,请参阅 “A needle in a billion haystacks”)。

通过本文了解如何向 PHP 站点中添加一个快速、高效、开源和免费的搜索引擎。本文没有开发可见的 Web 站点。相反,重点讨论交付有效搜索结果所需的组件:数据库、索引、搜索引擎和 PHP 应用程序编程接口 (API)。

访问优秀的 sphinx

要为站点提供自定义搜索功能,您必须有数据源和搜索该数据源的功能。对于 Web 应用程序,数据源通常是一个关系数据库,其中内置了一些搜索功能(Equality 是一个简单的搜索运算符,与 SQL 运算符 LIKE 一样)。但是,一些搜索可能比数据库可以执行的搜索更加具体,或者搜索可能过于复杂,而导致固有的 SQL JOIN 反应迟钝。

海底捞针
许多站点提供特定于某一个行业、职业或者娱乐的内容,例如医药、法律、音乐和汽车维修。深入研究这些内容可能要求使用特殊工具或者培训,或者仅需要使用一个索引来生成相关的实用结果。下面是一些需要定制搜索系统的常见搜索场景:

  • 查找 Joe Hockey 所撰写的关于斯坦利杯 (Stanley Cup) 的所有文章。
  • 查找 HP LaserJet 3015 All-in-One 打印机的最新驱动程序。
  • 查找 Dinosaur Jr. 参与大卫深夜脱口秀节目的电视片段。

要加速搜索,您可以重新安排表,并由此简化底层查询(表和 SQL 查询优化高度依赖于模式和引擎。可通过在线搜索查找有关数据库性能的各种文章和书籍)。此外,您可以添加一个专门化的搜索引擎。应用哪种形式的搜索引擎还依赖于数据的形式(和数量)和预算。有许多选择可用:您可以将一个 Google 工具连接到您的网络中,购买 Endeca 或其他大型商业搜索产品,或者尝试 Lucene。但是在很多情况下,使用商业产品都有点小题大做,或者浪费运营预算,并且 Lucene 在 2007 年 7 月编写时并未提供 PHP API。

作为一个备选方案,考虑一下 Sphinx,它是一种开源和免费的搜索引擎,可以非常快速地搜索文本。例如,在一个几乎有 300,000 行及五个索引列(每列包含大约 15 个单词)的活动数据库中,Sphinx 可以在 1/100 秒内得到 “这些单词中任何一个单词” 的搜索结果(在运行 Debian Linux® Sarge 的 2-GHz AMD Opteron 处理器、1 GB RAM 的计算机上)。

Sphinx 提供了大量功能,包括:

  • 它可以为能够表示为字符串的所有数据建立索引。
  • 它可以以各种方式为相同数据建立索引。对于多个索引,每个索引都针对特定目的而定制,您可以选择最适当的索引来优化搜索结果。
  • 它可以把属性与每条索引数据关联起来。然后您可以使用一个或多个属性来进一步过滤搜索结果。
  • 它支持词法,因此搜索单词 “cats” 还会找到词根 “cat”。
  • 您可以在许多计算机中分发 Sphinx 索引,从而提供故障恢复功能。
  • 它可以创建任意长度的单词前缀索引和可变长度的中缀子字符串的索引。例如,一个零件号可以是 10 个字符宽。前缀索引将匹配位于字符串开头处的所有可能的子字符串。中缀索引将匹配在字符串内任意位置的子字符串。
  • 您可以在 MySQL V5 内将其作为存储引擎运行,降低使用其他守护程序的需求(通常被视为另一个故障点)。

您可以在 Sphinx 源代码附带的 README 文件中或通过在线资料找到完整的功能列表。Sphinx Web 站点还列出了已经部署了 Sphinx 的若干个项目。

Sphinx 是用 C++ 编写、用 GNU 编译器构建、支持 64 位支持平台,并在 Linux、UNIX®、Microsoft® Windows® 和 Mac OS X 上运行。构建 Sphinx 十分简单:下载并解压缩代码,然后运行 ./configure && make && make install 命令。

Click to continue »

Tags:, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , .

卡巴斯基激活码key

今天终于是花了点时间把这个频道给开通了,算起来也是整理了很长一段时间了,只是一直没有太多的时间把这些东西给支起来,这两天也是忙里偷闲把这个卡巴斯基8.0激活码的东西先弄起来,想想也是汗,都快大年了,不过今天终于是ok了.现在送上几个卡巴斯基8.0的key,和共享一下卡巴司机的免费下载地址,如果想找序列号或是注册这类东西的朋友是可以溜进来瞧.av-one为你们准备好了大餐了. 现在就先放一个8.0的激活码:
KAV 8.0 - NNQGV-SASTS-7SY72-13TZ7
KIS 8.0 - AXFRG-JW6EC-47MP1-HV4EE

Tags:, , , , .

卡巴斯基7.0杀毒软件免费赠送一年激活码

领取激活码方法:
1.打开 bbs.kaspersky.com.cn ,注册一个新帐户;
2.注册成功后,会把你导向到一个“大雪无情,卡巴有情”反病毒赠送活动页面;
3.在页面上输入你的正确邮箱地址,点提交!
4.去你的邮箱找一封由kaba365@pcstars.com.cn发给你的激活码邮件,按邮件提示就能领取到激活码了.

卡巴斯基7.0软件下载地址:http://www.kaspersky.com.cn/KL-Downloads/KL-Product7.0.htm

注意事项:
每个电子邮件地址只能申请一个激活码,并请在收到激活码后两周内激活使用,过期将无法激活。
港澳台地区及海外用户不能参加!

Tags:, , , , , .

正则表达式学习笔记

 最近在学习正则,一些比较有用的东西怕忘记,记下来,比较乱,想一条记录一条:

//匹配文本,这个偶尔比较好用,但是要小心字符中包含\E
$str = '[a-z]‘;
$str = preg_replace(’/\G[a-z]\E/’, ”, $str);
echo $str; //打印空,全被替换掉了,相关大概就是preg_quote功能
//给匹配结果命名,这样在匹配结果中就可以用这个名称来获取值
$str = 'abc123abc';
preg_match('/(?P<num>\d+)/', $str, $arr);
echo $arr['num']; //相当于echo $arr[1]
//仅用于分组的括号,匹配内容不会被变量捕获,有时候需要这样提高执行效率
$str = 'abc123abc';
preg_match('/abc(?:\d+)/', $str, $arr);
echo $arr[1]; //除了$arr[0]外没有$arr[1]了,不会赋予\1
//插入的好帮手,向前、向后锚点搜索位置,每3位添加一个逗号
$str = 'fdfad123456789fdfd';
$str = preg_replace('/(?<=\d)(?=(\d{3})+(?!\d))/', ',', $str);
echo $str; //打印 fdfad123,456,789fdfd
//以最少的结果匹配
$str = 123456;
preg_match('/\d+/', $str, $arr);
echo $arr[0]; //是人都知道是123456吧
preg_match(’/\d+?/’, $str, $arr);
echo $arr[0]; //这次是1
//一个比较有用的,可以判断前面的是否有匹配过,比如下边的例子,可以忽略等号右边是否有单引号双引号或者什么都没有
$str = <<<HTML
<font size=12></font>
<font size='13'></font>
<font size="14"></font>
<font size="15></font>
HTML;
preg_match_all('/<font\s+size=([\'"]?)(\d+)\1[^>]*>/’, $str, $arr);
print_r($arr);
/*
Array
(
    [0] => 12
    [1] => 13
    [2] => 14
)
*/
//部分模式修饰符,模式修饰符也可以放在表达式中的
//这里匹配符合XHTML规范的style里的颜色值,大写的STYLE被忽略了,但是里面的color可以大小写无所谓
$str = '<b style="COLOR:red"></b><b STYLE="color:blue"></b><b style="color:green"></b>';
preg_match_all('/style=([\'"]?)(?i)color:(\w+)\1(?-i)/’, $str, $arr);
print_r($arr[2])
//也可以把匹配内容放到里面,用:隔开,就不用写结束(?-i)
//preg_match_all(’/style=([\'"]?)(?i:color:(\w+))\1/’, $str, $arr);
//再看一例子
$str = ‘<B>Style</B>’;
preg_match(’/<B>(?i:style)<\/B>/’, $str, $arr);
print_r($arr); //可以匹配到
$str = ‘<B>Style</b>’;
preg_match(’/<B>(?i:style)<\/B>/’, $str, $arr);
print_r($arr); //什么都没匹配到
//单词检索,可惜只能用在英文
$str = 'I\'m a teacher';
preg_match_all('/\b[a-z]+\b/i’, $str, $arr);
print_r($arr)
//u修饰符,按unicode匹配
$str = '你您';
$str = preg_replace('/[你您]/’, ‘you’, $str);
echo $str; //被拆开了,打印4次you
//看下面加上u修饰符后的效果,该修饰符需要编码utf-8否则会报错
//我的文本都是gb2312,所以要转成utf-8
$str = iconv(’gb2312′, ‘utf-8′, ‘你您’);
$regex = iconv(’gb2312′, ‘utf-8′, ‘/[你您]/u’);
$str = preg_replace($regex, ‘you’, $str);
echo $str; //打印2次you
//x模式修饰符,可以忽略空白和加注释
$str = 'test Test';
preg_match('/test  #只匹配小写的test/x', $str, $arr);
print_r($arr);
//排除环视(?<!...) (?!...)、忽略优先 *? +? ?? 的复合使用
$str = 'test <B>test1<B> test2</B>';
preg_match('/<B>(?:.(?<!<B>))*<\/B>/i', $str, $arr);
//或者 preg_match('/<B>(?:(?!<B>).)*<\/B>/i', $str, $arr);
print_r($arr)
//当时这样写应付不了 $str = 'test <B>test1<B> test2</B> test3</B>';
//改写一下正则既可 preg_match_all('/<B>(?:(?!<\/?B>).)*<\/B>/i', $str, $arr);
//根据上面来完成一个最简单的UBB替换
$str = 'test [b]test1[b] test2[/b] test3[/b]test’;
$str = preg_replace(’/\[B\]((?:(?!\[\/?B\]).)*)\[\/B\]/i’, ‘<b>\1</b>’, $str);
$str = preg_replace(’/\[B\]((?:(?!\[\/?B\]).)*)\[\/B\]/i’, ‘<b>\1</b>’, $str);
print_r($str)
//如果已经确认回朔并不会有匹配结果,可以使用固化分组来放弃备用状态提高效率
$str = 'Subject';
preg_match('/(\w+):/', $str, $arr);
//用以下方法代替
//在第一组匹配规则匹配到文本末尾t时匹配结束,启用第二组匹配规则:并不会找到结果,所以这个时候回朔查找,但是\w不会包含:,所以可以直接放弃,
preg_match('/(?>\w+):/', $str, $arr);

Tags:, , , , , , .

刚学的Flea的使用笔记.想一起学的来.绝对简单易懂.

开始学习PHP 的 Framework ,选中了一个国产的FleaPHP,它也是国内唯一一个比较成熟的。开始吧!

www.fleaphp.org上下载了一个最新的FleaPHP 1.7版本的。
先不管什么MVC了。照网上的教程一步一步来。

准备用它建立个GuestBook
先建立了个数据库 GuestBook 再建立两个数据表.
CREATE TABLE `message` (
  `mid` int(10) unsigned NOT NULL auto_increment,
  `author` varchar(20) default ‘Guest’,
  `email` varchar(60) default NULL,
  `ip` varchar(15) default ‘0.0.0.0′,
  `time` int(11) default ‘0′,
  PRIMARY KEY  (`mid`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312 AUTO_INCREMENT=1;

CREATE TABLE `content` (
  `mid` int(10) NOT NULL,
  `contest` text NOT NULL,
  KEY `mid` (`mid`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312;

建立目录结构 设定网站目录结构 根目录为 webroot/
webroot/
        Lib/
        FLEA/
       
        GuestBook/
        Images/
        Scripts/
        Styles/
        APP/
        Config/
        Controller/
        Model/
        View/

OK,简单的文件目录设置完毕。

再简单的设置好入口文件Index.php
File: Index.php
<?php
//设置基本目录
define(’APP_DIR’, dirname(__FILE__).’/APP’);

//引入FLEA.php
require(’../Lib/FLEA/FLEA.php’);

//设置配置文件
FLEA::loadAppInf(APP_DIR .’/Config/DSN.php’);

//引入基本目录s
FLEA::import(APP_DIR);

//运行
FLEA::runMVC();
?>       
Click to continue »

Tags:, , , , , , , , , , , , , , , , , , , , , , , , , , .

推荐一个IE下的优秀js调试工具(Companion.JS)

      做web开发的朋友都清楚,js程序的调试是相当郁闷的,因为首先这种语言语法比较灵活,它是一种弱类型的脚本语言,很多错误是无法控制的,这些不谈,最痛苦的是没有什么好的调试工具,现在的情况比以前稍好,在Firefox下还有firebug,这的确是一个不错的js调试工具,但在IE下使用就很麻烦,而且效果很不好,鄙人一直苦于寻找一个很好的IE下的js调试工具,能够自动捕获错误,并定位位置和原因,没想到今天竟在无意中寻找到了这么个好工具,不敢私藏,共享出来,希望能为各位web开发者带来方便

这个工具的名字叫Companion.JS,请注意,这可不是一个js文件,而是一个名字,它是作为ie的插件来安装使用的,而且需要结合Microsoft Script Debugger使用,通过安装这个工具,但页面出现错误时会在左上角弹出一个小错误提示,点击会在IE下面显示出一个错误控制台,就如FF下的firebug控制台一样。错误信息提示很详细。

如下是官网的一个错误提示示例图:
点击在新窗口中浏览此图片

官网地址:http://www.my-debugbar.com/wiki/CompanionJS/HomePage

具体使用方法为:
1、先下载Companion.JS安装文件,然后安装。
2、下载安装Microsoft Script Debugger,如果您的机器已经安装过了就可以免过这一步。
3、打开IE菜单“工具”–“Internet选项”–“高级”,找到“禁用脚本调试(Internet Explorer)”和“禁用脚本调试(在Internet Explorer之外)”,将两个选项前面的对钩都去掉,然后重启IE。
4、在Ie中输入:http://www.my-debugbar.com/wiki/uploads/CompanionJS/dummy.htm,然后点击click me链接,如果左上角弹出一个小错误提示或下面控制台出现了错误信息提示,就说明您已经安装成功了。

提示:Microsoft Script Debugger下载可到MS官网(需要经过MS的操作系统正版验证):http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=E606E71F-BA7F-471E-A57D-F2216D81EC3D#filelist或到baidu里输入“Microsoft Script Debugger 下载”寻找一下。

Tags:, , , , , , , , , , , , , .

zend framework 和 fleaphp 比较

1、文档:ZF 更详细。但是 FleaPHP 的文档和资料也不少,只是更零散,需要在论坛用搜索功能查找。
2、类库:数量肯定是 ZF 占优,但是在数据库、用户界面构造上,我认为 FleaPHP 更强,至少 FleaPHP 的表数据入口提供的复杂关联支持 ZF 就赶不上。而 FleaPHP 的 WebControls 机制是构造复杂用户界面的理想方式,可以轻松实现用户界面各个区域的分离和复用。
3、可用性。。。。。这个就公说公有理婆说婆有理了。
4、性能:FleaPHP 比 ZF、CakePHP、Symfony、Code Igniter、ThinkPHP 都快;
5、易用性:一般有经验的开发者一周左右的练习就可以开始做实际项目。

Click to continue »

Tags:, , , , , , , , , , , , , , , , .

权限设计 以及 树的存储

平时看到各位园子的朋友真的很厉害,设计了很多关于权限管理的东西,

很羡慕,但同时也觉得在一些小型项目上,那样的设计是否有点设计过度呢

其实这也说不清,可能是自己资历尚浅,还没看明白各位高人的设计

自己也写了个,帖出来请教下园子的各位朋友

用PD 弄了个图,

PD画的图,权限设计,树设计存储

Click to continue »

Tags:, , , , , , , , , , , .