<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[七小木东]]></title> 
<link>http://www.qixiaomudong.cn/index.php</link> 
<description><![CDATA[七小木东]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[七小木东]]></copyright>
<item>
<link>http://www.qixiaomudong.cn/read.php?427</link>
<title><![CDATA[short_open_tag设置为on]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[PHP技术]]></category>
<pubDate>Wed, 01 Sep 2010 07:47:24 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?427</guid> 
<description>
<![CDATA[ 
	<??>是<?php ?>的缩写形式，需要将php.ini中的short_open_tag设置为on<br/>=$var 与echo $var 相等，写哪种形式都是一样的。
]]>
</description>
</item><item>
<link>http://www.qixiaomudong.cn/read.php?340</link>
<title><![CDATA[php expert editor 4.1、4.2注册码 ]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[PHP技术]]></category>
<pubDate>Mon, 18 Jan 2010 02:20:07 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?340</guid> 
<description>
<![CDATA[ 
	php expert editor 4.1、4.2注册码 <br/>************************ <br/>0cbl23uZc/pJ0+w4/Hixk6Ckc5lLCRQpaHrD9jW8FHsXF2AtF67JMfU2CWxF+FrMrSUf4Kq0kMWV70hw4r39X8ebBu6BaU6+ryH0pHvSQKpunSS9rGKIhqGgcIkXMgoO4w7NXnZ82RI8GUv9/Et9x1VvI8KG3XMPzctHd46nyvBA= <br/>************************
]]>
</description>
</item><item>
<link>http://www.qixiaomudong.cn/read.php?339</link>
<title><![CDATA[zend studio 7.0、7.1 注册码]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[PHP技术]]></category>
<pubDate>Mon, 18 Jan 2010 02:19:42 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?339</guid> 
<description>
<![CDATA[ 
	zend studio 7.0、7.1 注册码<br/><br/><br/>Username: zendstudio.net<br/>Serial Number: 3727234F6095F72034F6095F
]]>
</description>
</item><item>
<link>http://www.qixiaomudong.cn/read.php?240</link>
<title><![CDATA[PHP中Switch语句的用法示例]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[PHP技术]]></category>
<pubDate>Wed, 11 Mar 2009 07:22:34 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?240</guid> 
<description>
<![CDATA[ 
	PHP 中的 Switch 语句用于执行基于多个不同条件的不同动作。<br/><br/>Switch 语句<br/>如果您希望有选择地执行若干代码块之一，请使用 Switch 语句。<br/><br/>使用 Switch 语句可以避免冗长的 if..elseif..else 代码块。<br/><br/>语法<br/>switch (expression){case label1:&nbsp;&nbsp;code to be executed if expression = label1;&nbsp;&nbsp;break;&nbsp;&nbsp;case label2:&nbsp;&nbsp;code to be executed if expression = label2;&nbsp;&nbsp;break;default:&nbsp;&nbsp;code to be executed&nbsp;&nbsp;if expression is different&nbsp;&nbsp; from both label1 and label2;}实例<br/>工作原理：<br/><br/>对表达式（通常是变量）进行一次计算 <br/>把表达式的值与结构中 case 的值进行比较 <br/>如果存在匹配，则执行与 case 关联的代码 <br/>代码执行后，break 语句阻止代码跳入下一个 case 中继续执行 <br/>如果没有 case 为真，则使用 default 语句 <br/>&lt;?php<br/>switch ($x)<br/>{<br/>case 1:<br/>&nbsp;&nbsp;echo &quot;Number 1&quot;;<br/>&nbsp;&nbsp;break;<br/>case 2:<br/>&nbsp;&nbsp;echo &quot;Number 2&quot;;<br/>&nbsp;&nbsp;break;<br/>case 3:<br/>&nbsp;&nbsp;echo &quot;Number 3&quot;;<br/>&nbsp;&nbsp;break;<br/>default:<br/>&nbsp;&nbsp;echo &quot;No number between 1 and 3&quot;;<br/>}<br/>?&gt;<br/>TAGs: 语句&nbsp;&nbsp; switch&nbsp;&nbsp; php&nbsp;&nbsp; 
]]>
</description>
</item><item>
<link>http://www.qixiaomudong.cn/read.php?209</link>
<title><![CDATA[直面40个菜鸟迹象——40个迹象表明你还是PHP菜鸟]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[PHP技术]]></category>
<pubDate>Mon, 15 Dec 2008 02:49:08 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?209</guid> 
<description>
<![CDATA[ 
	这些迹象不只是用来告诉我是菜鸟，还告诉我还有很多要学习的。<br/>简介<br/>40个迹象的英文版权归Reinhold Weber所有，中译文作者yangyang（aka davidkoree）。双语版可用于非商业传播，但须注明英文版作者、版权信息，以及中译文作者。翻译水平有限，请广大PHPer指正。<br/>40个Conquer的作者是《PHPer》李俊鹏，可用于非商业传播。<br/>正文<br/>我愿意把本文归入我的“编程糗事”系列。尽管在正规大学课程中，接触到软件工程、企业级软件架构和数据库设计，但我还是时不时地体会到下述事实带给我的“罪恶”感，当然，都是我的主观感受，并且面向Eclipse。<br/>你是PHP菜鸟，如果你：<br/>1. 不会利用如phpDoc这样的工具来恰当地注释你的代码<br/>Conquer 1<br/>phpDoc是PEAR下的一个优秀模块，如同javadoc一样为代码生成API文档。phpDoc采用OOP的思想编写，它扫描指定目录下的PHP源码，识别出注释中的专用标记然后生成XML文件（或其它），然后建立相应的索引。即本质是从源码中的注释生成文档。<br/>2. 对优秀的集成开发环境如Zend Studio或Eclipse PDT视而不见<br/>Conquer 2<br/>我不知道该怎么描述Zend，只是夜色里有人曾这么说过：PHP界的Zend如同软件界的微软；而Eclipse则是另一款多功能的开发环境，想来大多数人都是用它来写Java的（比如我），而PDT即PHP Development Tools则是可以使用户可以在Eclipse写PHP的插件。BTW，如果有兴趣，你也可以自己为Eclipse开发个插件。^_^<br/>3. 从未用过任何形式的版本控制系统，如Subclipse<br/>Conquer 3<br/>版本控制系统？还是先了解一下版本控制吧：版本控制就是数据仓库，它可以记录你对文件的每次更改。这样自然也就了解了什么是版本控制系统了。而进一步的了解不是三两句可以结束的，所以直接推荐,自己选择一个吧！<br/>（1）http://www.phpchina.com/bbs/thread-46209-1-1.html<br/>（2）http://bbs.phpchina.com/thread-47473-1-1.html<br/>（3）http://bbs.phpchina.com/thread-89264-1-1.html<br/>4. 不采用某种编码与命名标准，以及通用约定，不能在项目开发周期里贯彻落实<br/>Conquer 4<br/>我觉得良好的代码书写习惯令人很舒服，缩进实在是必需的——要不看着那一堆密密麻麻毫无美感的代码，实在令人郁闷。缩进一般是4个空格，PEAR标准中不建议使用TAB键（在这里我小小汗颜一下），因为有些场合会出现问题（虽然我还没遇到）。而命名建议变量：第一个单词小写开头，其它大写开头如：myName，而类名建议都大写开头如：MyName或者My_Name，至于用不用下划线我觉得差别不大（如果很大请指教）。<br/>5. 不使用统一开发方式<br/>Conquer 5<br/>由于还是个人PHP爱好者，所以对于团队共同开发还是经验匮乏的，在此，对于开发方式这个词有种好像理解又不理解的错觉，而且利用搜索引擎好久也很难找到一篇比较满意的文章，所以直接推荐：<br/>（1）http://www.phpchina.com/html/42/1142-7314.html<br/>（2）http://topic.csdn.net/u/20080509/09/9b81d740-68fc-4d63-9299-ce6675f240cb.html<br/>（3）http://www.ibm.com/developerworks/cn/web/wa-jacquard/index.html#N10064<br/>其实，个人觉得开发方式这个词挺泛、挺抽象……<br/>6. 不转换（或）也不验证某些输入或SQL查询串（译注：参考PHP相关函数）<br/>Conquer 6<br/>始终坚信一点：绝不相信未经处理的用户输入。而过滤用户输入是Web安全的基础。所以设计者始终应该清楚地知道数据的来源、过滤数据、将已经处理过的数据和未处理的数据区分开。<br/>7. 不在编码之前彻底规划你的程序<br/>Conquer 7<br/>我个人觉得这点和写程序前画流程图之类或者做项目的开发流程一样，应该不需要过多解释。<br/>8. 不使用测试驱动开发<br/>Conquer 8<br/>测试驱动开发（Test Driven Development，英文缩写TDD）是极限编程的一个重要组成部分，它的基本思想就是在开发功能代码之前，先编写测试代码。也就是说在明确要开发某个功能后，首先思考如何对这个功能进行测试，并完成测试代码的编写，然后编写相关的代码满足这些测试用例。然后循环进行添加其他功能，直到完成全部功能的开发。代码整洁可用（clean code that works）是测试驱动开发所追求的目标。（摘自百度百科）<br/>9. 不在错误开启状态下进行编码和测试（译注：参考PHP函数error_reporting）<br/>Conquer 9<br/>我想一般写代码的时候都会开启错误报告吧。这里顺便了解下error_reporting原型为int error_reporting([ int $level])，该函数的作用是设置要显示报告的错误等级，详情参阅：<br/>http://cn2.php.net/manual/en/function.error-reporting.php<br/>10. 对调试器的好处视而不见<br/>Conquer 10<br/>推荐几款调试器：<br/>（1）Zend IDE<br/>（2）APD<br/>（3）Xdebug<br/>11. 不重构你的代码<br/>Conquer 11<br/>重构是指使用一系列重构准则（手法），在不改变“软件之可察行为”前提下，调整其结构，是对软件内部结构的一种调整。目的是在不改变“软件之可察行为”前提下，提高其可理解性，降低其修改成本。重构的好处能改进软件设计使软件更容易被理解，帮助设计者找到BUG，并且提高软件的开发速度。简而言之，重构就是改进已经写好的软件的设计。<br/>12. 不使用类似MVC模式把程序的不同层次划分开<br/>Conquer 12<br/>MVC（Model View Controller）即模型—视图—控制器，视图是呈现给用户的一面，模型则是处理任务的模块，而控制器则是控制视图和模型间的映射，即在用户响应下选择何种模型进行处理，而任务处理后控制以何种视图呈现。<br/>13. 不知道这些概念：KISS、DRY、MVC、OOP、REST<br/>Conquer 13<br/>（1）KISS是指Keep It Simple,Stupid（摘自wikipedia），指设计时要坚持简约原则，避免不必要的复杂化。<br/>（2）DRY是指Don't Repeat Yourself（摘自wikipedia），特指在程序设计以及计算中避免重复代码，因为这样会降低灵活性、简洁性，并且可能导致代码之间的矛盾。<br/>（3）OOP即Object-Oriented Programming，是指面向对象的程序设计。我一直觉得经典的比喻是汽车是一个类（Class），而这个类的属性有轮子、车身、马达等，方法有加速、减速等；而劳斯莱斯就是一个对象（Object）了，这个对象继承了汽车这个类的属性和方法；而如何实现加速、减速？这样的信息被隐藏了——即信息封装（封装），只留下用户接口给我们了，比如踩刹车、踩油门；至于多态嘛，我粗糙比喻下就是一台自动贩卖机（我们假设它每种价格只有一款饮料），同样是投币这种方法，但是你投进去2元跟5元得到的结果是不一样的——当然，除非这贩卖机有问题。<br/>（4）REST（Representational State Transfer）是一种针对网络应用的设计和开发方式，可以降低开发的复杂性，提高系统的可伸缩性。REST提出了一些设计概念和准则：<br/>a. 网络上的所有事物都被抽象为资源（resource）；<br/>b. 每个资源对应一个唯一的资源标识（resource identifier）；<br/>c. 通过通用的连接器接口（generic connector interface）对资源进行操作；<br/>d. 对资源的各种操作不会改变资源标识；<br/>e. 所有的操作都是无状态（stateless）。（摘自百度百科）<br/>14. 不用return而是直接在你的函数或类中输出（echo/print）内容<br/>Conquer 14<br/>这一点，观摩大虾的源代码都是用return的，所以我一般也这么学习使用这，至于原因，我就是觉得这样用感觉蛮好的。或许是严禁风格吧。但是其实我对这句有点不理解，函数一般都是需要返回语句的嘛，除非是专门用来输出的函数。<br/>15. 对单元测试或通用测试的优点视而不见<br/>Conquer 15<br/>（1）单元测试是在软件开发过程中要进行的最低级别的测试活动，在单元测试活动中，软件的独立单元将在与程序的其他部分相隔离的情况下进行测试，不仅能保证项目进度还能优化设计。我记得我以前在写比较长的C代码的时候都会在特定模块结束时补一段测试代码来检验，不知道算不算。^_^<br/>（2）通用测试技术？这让我想起图书馆里图灵系列图书的一本《软件测试****》，具体名字忘记了。这些都是属于软件测试的范畴，如果需要可以下载：http://bbs.phpchina.com/thread-94241-1-1.html<br/>16. 总是返回硬编码的HTML，却不返回纯粹的数据、字符串或对象<br/>17. 总是对“消息”和“配置参数”进行硬编码<br/>Conquer 16-17<br/>硬编码的使用会造成程序的不灵活，以后修改的复杂问题，还有可能会遇到编译的问题。更具体了解：http://bbs.bc-cn.net/thread-32143-1-6.html<br/>18. 不对SQL查询语句做优化<br/>Conquer 18<br/>SQL语句的优化是将性能低下的SQL语句转换成目的相同的性能优异的SQL语句。这样的好处是显而易见的，可使用人工智能自动SQL优化。<br/>19. 不使用__autoload（译注：参考PHP手册相关描述）<br/>Conquer 19<br/>__autoload函数会在试图使用尚未被定义的类时自动调用。通过调用此函数，脚本引擎在 PHP出错失败前有了最后一个机会加载所需的类。详见：http://cn.php.net/__autoload<br/>20. 不允许智能错误处理（译注：参考PEAR的ErrorStack）<br/>Conquer 20<br/>PEAR_ErrorStack提供了一种基于堆栈的错误处理方法，将各种错误统一起来指向同一个地方以达到把多个无关项目连接到同一个应用程序的目的。（译自：http://pear.php.net/package/PEAR_ErrorStack）<br/>21. 使用$_GET替代$_POST来做具有破坏性的传递操作<br/>Conquer 21<br/>个人理解，使用$_GET会使一些信息暴露在URL中。<br/>22. 不知道怎么利用正则表达式<br/>Conquer 22<br/>正则表达式？我想可以去夜色找找shanji，或者到夜色共享手册里下载一本学习：http://bbs.phpchina.com/thread-89223-1-1.html<br/>23. 从未听说过SQL注入或跨站脚本<br/>Conquer 23<br/>（1）所谓SQL注入，就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串，最终达到欺骗服务器执行恶意的SQL命令，比如先前的很多影视网站泄露VIP会员密码大多就是通过Web表单递交查询字符暴出的，这类表单特别容易受到SQL注入式攻击；<br/>（2）业界对跨站攻击的定义如下：“跨站攻击是指入侵者在远程Web页面的HTML代码中插入具有恶意目的的数据，用户认为该页面是可信赖的，但是当浏览器下载该页面，嵌入其中的脚本将被解释执行。”由于HTML语言允许使用脚本进行简单交互，入侵者便通过技术手段在某个页面里插入一个恶意HTML代码，例如记录论坛保存的用户信息（Cookie），由于Cookie保存了完整的用户名和密码资料，用户就会遭受安全损失。如这句简单的Java脚本就能轻易获取用户信息：alert(document.cookie)，它会弹出一个包含用户信息的消息框。入侵者运用脚本就能把用户信息发送到他们自己的记录页面中，稍做分析便获取了用户的敏感信息。（摘自百度百科）<br/>24. 不允许简易配置，也不允许类的构造函数接受参数传递而后执行set/get方法，或运行时的常量定义<br/>Conquer 24<br/>就一句话：不要不允许类的构造函数接受参数传递。<br/>25. 不理解面向对象编程（OOP）的优势和劣势<br/>26. 不视情形大小而滥用OOP<br/>27. 自认为实现可复用的软件一定等于/需要让你的代码遵循OOP<br/>Conquer 25-27.<br/>OOP的优点：使人们的编程与实际的世界更加接近，所有的对象被赋予属性和方法，结果编程就更加富有人性化。OOP的缺点：就C++而言，由于面向更高的逻辑抽象层，使得C++在实现的时候，不得不做出性能上面的牺牲，有时候甚至是致命的。<br/>28. 不利用智能缺省值<br/>Conquer 28<br/>我想，使用缺省值是个好习惯。<br/>29. 没有单一的配置文件<br/>Conquer 29<br/>专门设置个config.php我想是需要的。<br/>30. 不想暴露文件源码，却用.inc后缀名取代了.php<br/>Conquer 30<br/>*.inc文件顾名思义是include file的意思，一般我们使用inc作为后缀，是因为这样能体现该文件的作用。*.inc文件的作用有点类似于C/C++内的*.H、*.HPP头文件，使用inc文件可以使我们的程序，增加可读性，更易于开发和维护。<br/>31. 不使用数据库抽象层<br/>Conquer 31<br/>请参考http://bbs.phpchina.com/thread-94258-1-1.html<br/>32. 不能保持DRY作风，即不重复自己，如果你总是在复制粘贴一些东西，说明你设计得很差劲<br/>Conquer 32<br/>请参考13点<br/>33. 没有实现让一个函数/类/方法只做一件事，也不能组合利用它们<br/>Conquer 33<br/>这需要锻炼，在实践中学习、完善着。<br/>34. 没能尝试OOP的特长，如抽象类、接口、多态、继承，访问控制修饰符（译注：如public、private、protected）<br/>Conquer 34<br/>哦，my god，我想还是参考25-27吧，也是需要在实践中成长的。<br/>35. 不用现有的设计模式优化你的程序体系设计<br/>Conquer 35<br/>推荐《Head First》设计模式<br/>36. 不允许你的用户在你拥有很多文件或目录的情况下定义基础目录<br/>Conquer 36<br/>保留，这点我有点懵。^_^<br/>37. 污染了名称空间，比如用常见字符串命名你的库函数<br/>Conquer 37<br/>哎，这实在是个不好的习惯，不过好习惯是养成的！<br/>38. 使用数据库表时不使用表前缀<br/>Conquer 38<br/>我想，可能，PHPChina的数据表的前缀是PPC_或者PCC_。这的确是有好处的，我觉得，就好像字段名使用如txtUsername这样的格式。<br/>39. 不使用统一的模板引擎<br/>Conquer 39<br/>这我都有点不知道该怎么说了，一个团队一般都使用统一的模板引擎吧。<br/>40. 不关注已有的PHP开发框架，懒于探索；其实先进的开发理念和美妙代码就蕴含其中。<br/>Conquer&nbsp;&nbsp;40<br/>比如Zend Framework、CakePHP、FleaPHP、ThinkPHP等。<br/>
]]>
</description>
</item><item>
<link>http://www.qixiaomudong.cn/read.php?207</link>
<title><![CDATA[用Pear加速PHP程序开发]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[PHP技术]]></category>
<pubDate>Fri, 05 Dec 2008 03:07:26 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?207</guid> 
<description>
<![CDATA[ 
	及时交付应用程序是确定解决方案采用何种技术的关键所在，PHP借助于PEAR（PHP Extension and Application Repository：PHP扩展与应用库）会大大促进其开发过程。PEAR是一种代码库，它为标准程序功能提供预先编写的类，从而大大降低了应用程序的开发时间。PEAR在概念上类同于Perl的CPAN，PEAR包含了具有丰富特性的功能函数，包括数据库、邮件和错误处理等。在采用PEAR的情况下，开发人员就可以部署和增强已经编写的基本函数同时把注意力集中到编写程序新功能这一方面上来。<br/><br/>PEAR基础<br/>创建PEAR的目的是为开发人员共享PHP代码和促进代码的重用提供一种标准化的方式。该项目始终处于开发的过程中，用户可以提交自己编写的代码供加入PEAR库使用，后者则同PHP捆绑。所有的PEAR包都在考虑到语法和可读性的情况下严格遵守编码规则，这些代码由用C语言编写的PHP或者PHP扩展所组成。<br/><br/>Stig Bakken于1999年晚些时候开始着手开发PEAR项目。他的目的是创建一个有组织的代码库，由这个代码库起到PHP开发人员团体的资源库作用。该项目在过去的两年里成长的非常快，目前已经包含了相当多的、非常有用的可重用代码。虽然其他的PHP代码库也不少，比如Zend的Code Gallery和PHP Builder的Source Code Snippet Library等等都非常有名，但是，PEAR提供了一种便利函数之间互操作的标准。此外，提交给PEAR的代码会接受严格的检查，由这类标准和检查措施保证代码的质量和可靠性。<br/><br/> <br/><br/>有用的网站<br/> <br/>PEAR网站<br/>php.net<br/>Concurrent Versions System<br/>Zend <br/><br/> <br/><br/>可用的功能<br/>PEAR分成三类：PEAR核心组件、PEAR包和PECL包。核心组件（Core Component）包括PEAR和PEAR_Error的基类以及数据库、HTTP、日志记录和电子邮件函数等。PEAR包包括提供认证、联网和文件系统特性的函数以及采用XML和HTML模版的工具等。PECL包是对PHP的扩展，它用C语言编写，并不遵守编码规则。目前，所有这一类的代码都是实验性的。要了解有关PEAR功能的更多信息请参考PEAR在线手册。<br/><br/>假如你有兴趣给PEAR提交代码，你可以加入PEAR开发者邮件列表并且请求大家检查你的代码，从而实现以上目的。不过，你得注意到已经包括在库内的函数并且遵守PEAR的编码规则。<br/><br/>从哪里获取PEAR<br/> <br/><br/>PEAR捆绑在PHP发布包内，当你安装PHP的时候也就同时安装了PEAR。假如你打算获得一个稳定的版本，而且你可以在没有最新PEAR版本的情况下也活得下去，那么你可以从php.net的下载网页获得最新的PHP版本。假如你喜爱冒险，希望采用最新版本的PEAR，你可以按照匿名CVS访问的指示用CVS客户程序下载它。<br/><br/>安装了PHP之后PEAR资源就会被放置到~/php/PEAR/目录下。你不妨把自己的php目录位置增加到php.ini的include_path参数中来（比如：include_path = ".:/usr/local/lib/php";），这样就可以使用PEAR功能了。<br/><br/>如何使用PEAR<br/>现在所要做的无非是在用到函数和你编写的其他类的地方采用require_once()。清单A中的例子使用了PEAR的电子邮件特性Sendmail。这部分代码例示了PEAR库内的Mail.php文件，该文件是对PEAR.php类的扩展。<br/><br/>接下来，我们设置一些必要的变量，它们是$recipients、$headers和$body，这些变量是所有PEAR Mail函数和$params所需要的。你可以参在线PEAR手册找出这些变量的设置方法。在PEAR代码本身的注释中也蕴涵了很多信息，不过一般而言，网站对你的帮助还是最大的。<br/><br/>最后，示例代码会调用PEAR Mail类。首先，我们用~/php/Mail.php文件中的Mail::factory方法为邮件驱动程序包含适当的类文件，在我们所举的例子里就是Sendmail（位于~/php/Mail/sendmail.php文件内）。接着，我们从PEAR Mail类里实际调用邮件发送函数。当我们对Mail类实例化的时候采用引用（=&）就可以通过引用名$mail_object引用该类了。<br/><br/>假如你想了解PEAR DB函数的用法，你不妨到Quick Start Guide to Pear DB去看看，它是由Tomas V. V. Cox负责维护的。<br/><br/><br/>为什么使用PEAR<br/>如上所述，PEAR功能部署简单，同时不需要额外的编程。虽然我们可以用PHP的固有函数达到同样的结果，但是，部署PEAR模块可以立即为我们带来错误检查等实际利益，同时还便利了程序的重用。<br/><br/>此外，越来越多的高级应用程序也开始采用PEAR了，而PEAR的代码库也在不断的增长之中。因为PEAR包含在PHP许可权之内，所以你可以免费使用或者修改你选择的函数。还有，你再也不必反复编写令人麻木的认证模块了，这对开发人员来说可是一项具有相当吸引力的好处，而且你还可以享受到定制开发的莫大优点。<br/><br/><br/>好处多多<br/>采用合格的预编写、可重用代码，你就可以显著地加快应用程序的开发周期而不必在技术选择上过分地费脑筋了。PEAR是PHP团体为便利开发者而付出的努力所结出的硕果，它提供了实现优秀应用程序的一整套方法。采用PEAR代码以及为其做出自己的贡献不仅加快了项目交付时间，同时还可以在今天和未来开发出质量更好的应用程序。<br/><br/>TechRepublic是一个专为各类IT专业人士设立的在线社区以及资源中心，我们提供有深度的技术文章，这些文章由IT专家写成，面对IT专家读者。除了提供从Windows到e-mail到防火墙等各种文章以外，我们还提供IT业界分析，下载，管理要点，讨论组以及新闻邮件服务。<br/><br/>http://pear.phpv.net/cn/
]]>
</description>
</item><item>
<link>http://www.qixiaomudong.cn/read.php?190</link>
<title><![CDATA[PHP友好URL的实现]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[PHP技术]]></category>
<pubDate>Thu, 13 Nov 2008 00:57:49 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?190</guid> 
<description>
<![CDATA[ 
	下面的代码主要是伪静态的实现，搜索引擎喜欢<br/><br/>大家经常看到别的站的URL是这样的吧？<br/>http://www.xxx.com/module/show/action/list/page/7<br/>或者<br/>http://xx.com/module/show/action/show/id/8.shtml 带扩展名的<br/>或者<br/>http://xx.com/module/show/action/show/id/8?word=ss&amp;age=11<br/>这样的吧<br/>今天我就是公布下这种方法的实现，并独立出最简单的代码<br/>函数如下，没封装成类，主要是没必要，用函数能方便些<br/><br/>&lt;?php<br/>/**<br/>* 获得友好的URL访问<br/>*<br/>* @accesspublic<br/>* @return array<br/>*/<br/>function getQueryString()&#123;<br/>$_SGETS = explode(&quot;/&quot;,substr($_SERVER[&#039;PATH_INFO&#039;],1));<br/>$_SLEN = count($_SGETS);<br/>$_SGET = $_GET;<br/>for($i=0;$i&lt;$_SLEN;$i+=2)&#123;<br/>if(!empty($_SGETS[$i]) &amp;&amp; !empty($_SGETS[$i+1])) $_SGET[$_SGETS[$i]]=$_SGETS[$i+1];<br/>&#125;<br/>$_SGET[&#039;m&#039;] = !empty($_SGET[&#039;m&#039;]) &amp;&amp; is_string($_SGET[&#039;m&#039;]) ? trim($_SGET[&#039;m&#039;]).&#039;Action&#039; : &#039;indexAction&#039;;<br/>$_SGET[&#039;a&#039;] = !empty($_SGET[&#039;a&#039;]) &amp;&amp; is_string($_SGET[&#039;a&#039;]) ? trim($_SGET[&#039;a&#039;]) : &#039;run&#039;;<br/>return $_SGET;<br/>&#125;<br/>/**<br/>* 生成链接URL<br/>*<br/>* @accesspublic<br/>* @param array $arr<br/>* @return string<br/>*/<br/>function setUrl($arr)&#123;<br/>global $Global;<br/>$queryString=&#039;&#039;;<br/>if($Global[&#039;urlmode&#039;]==2)&#123;<br/>foreach($arr as $k=&gt; $v)&#123;<br/>$queryString.=$k.&#039;/&#039;.$v.&#039;/&#039;;<br/>&#125;<br/>&#125;<br/>$queryString.=$Global[&#039;urlsuffix&#039;];<br/>return $queryString;<br/>&#125;<br/>?&gt;<br/>使用很简单<br/>&lt;?php<br/>$_GET= getQueryString();<br/>?&gt;<br/>但是这样还不行，这样只能实现<br/>http://www.xxx.com/index.php/module/show/action/list/page/7 这样的<br/>中间多了个index.php 为此我们要把他去掉，只好重写<br/>但是有些文件 又不希望这样，比如 样式 图片，那就放条件里<br/>建立一个 .htaccess文件<br/><br/>RewriteEngine on<br/>RewriteCond $1 !^(index&#92;.php&#124;css&#124;pics&#124;themes&#124;js&#124;robots&#92;.txt)<br/>RewriteRule ^(.*)$ index.php/$1 [L]<br/>现在OK了，赶快去测试吧<br/><br/>&lt;?php<br/>$_GET= getQueryString();<br/>print_r($_GET);<br/>?&gt;<br/>
]]>
</description>
</item><item>
<link>http://www.qixiaomudong.cn/read.php?120</link>
<title><![CDATA[Zend Studio For Eclipse 6.0 实用快捷键]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[PHP技术]]></category>
<pubDate>Mon, 27 Oct 2008 02:51:43 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?120</guid> 
<description>
<![CDATA[ 
	Zend Studio For Eclipse 6.0 实用快捷键<br/>ZendChina官方：为了方便开发者的使用，提高开发效率，下面对Zend Studio For Eclipse 6.0的快捷键的功能进行详细介绍。<br/>Ctrl+1 快速修复(最经典的快捷键,就不用多说了)<br/>Ctrl+D: 删除当前行<br/>Ctrl+Alt+↓ 复制当前行到下一行(复制增加)<br/>Ctrl+Alt+↑ 复制当前行到上一行(复制增加)<br/>Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)<br/>Alt+↑ 当前行和上面一行交互位置(同上)<br/>Alt+← 前一个编辑的页面<br/>Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)<br/>Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性<br/>Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)<br/>Shift+Ctrl+Enter 在当前行插入空行(原理同上条)<br/>Ctrl+Q 定位到最后编辑的地方<br/>Ctrl+L 定位在某行 (对于程序超过100的人就有福音了)<br/>Ctrl+M 最大化当前的Edit或View (再按则反之)<br/>Ctrl+/ 注释当前行,再按则取消注释<br/>Ctrl+O 快速显示 OutLine<br/>Ctrl+T 快速显示当前类的继承结构<br/>Ctrl+W 关闭当前Editer<br/>Ctrl+K 参照选中的Word快速定位到下一个<br/>Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)<br/>Ctrl+/(小键盘) 折叠当前类中的所有代码<br/>Ctrl+×(小键盘) 展开当前类中的所有代码<br/>Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替)<br/>Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)<br/>Ctrl+J 正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)<br/>Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查)<br/>Ctrl+Shift+F4 关闭所有打开的Editer<br/>Ctrl+Shift+X 把当前选中的文本全部变为小写<br/>Ctrl+Shift+Y 把当前选中的文本全部变为小写<br/>Ctrl+Shift+F 格式化当前代码<br/>Ctrl+Shift+P 定位到对于的匹配符(譬如&#123;&#125;) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)
]]>
</description>
</item><item>
<link>http://www.qixiaomudong.cn/read.php?116</link>
<title><![CDATA[Zend Studio for Eclipse 6.0 官方下载地址+注册机]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[PHP技术]]></category>
<pubDate>Mon, 20 Oct 2008 08:18:43 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?116</guid> 
<description>
<![CDATA[ 
	Zend Studio for Eclipse 6.0 官方下载地址+注册机<br/>官方下载地址<br/>1、DMG格式文件（这个应该是你安装了Eclipse之后，将此文件作为其插件安装的）<br/>http://downloads.zend.com/studio-eclipse/6.0.0/ZendStudioForEclipse-6.0.0.dmg<br/><br/>2、EXE格式文件（这个是windows下的完全安装版）<br/>http://downloads.zend.com/studio-eclipse/6.0.0/ZendStudioForEclipse-6_0_0.exe<br/><br/>3、GZ格式文件（这个是linux下的完全安装程序）<br/>http://downloads.zend.com/studio-eclipse/6.0.0/ZendStudioForEclipse-6_0_0.tar.gz<br/><br/>4、ZIP格式文件（这个则是适用于Mac_OS_X下的安装程序）<br/>http://downloads.zend.com/studio-eclipse/6.0.0/ZendStudioForEclipse-6_0_0.zip<br/><br/>注册机（KeyMaker）<br/><br/><br/>注：不想下载注册机的可以使用下面一组注册码或者使用 Zend Studio for Eclipse 6.0 在线注册机 进行注册<br/>ID: ZendStudio.Net<br/>Serial:341747F1116666990000<br/><br/>Zend Studio For Eclipse 6.0中文版 注册码<br/>用户名：PHPER <br/>注册码：4784D9D0086669570000<br/><br/>用户名：Faceker.com<br/>注册码：02251FE3126660400000<br/>
]]>
</description>
</item><item>
<link>http://www.qixiaomudong.cn/read.php?114</link>
<title><![CDATA[发现 FLEADbDriverMysql.php 有个严重错误]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[PHP技术]]></category>
<pubDate>Tue, 14 Oct 2008 10:32:41 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?114</guid> 
<description>
<![CDATA[ 
	发现一个错误！<br/>mysql_connect() expects parameter 5 to be long, string given in C:&#92;AppServ&#92;www&#92;OAS&#92;FLEA&#92;FLEA&#92;Db&#92;Driver&#92;Mysql.php on line 154<br/>发现 FLEA&#92;Db&#92;Driver&#92;Mysql.php 有个严重错误<br/><br/>line 61<br/><br/>if (isset($dsn['options'])) &#123;<br/><br/>需要改为<br/><br/>if (isset($dsn['options']) && $dsn['options'] != '') &#123;<br/><br/>不然程序无法运行<br/>Exception: FLEA_Db_Exception_SqlQuery<br/>Message: SQL 语句: "mysql_connect('localhost', 'root') failed!" SQL 错误代码: "7335942".
]]>
</description>
</item>
</channel>
</rss>