Archive for the Category » PHP / Zend «

ZF的module不错

  前面使用Zend framework开发的项目不算太复杂,目录结构和controller都相对简单,近期开始的东西涉及到子域名、多子系统,于是重新看了Zf的文档,发现了Controller里面的module功能很不错。

  先规划如下目录结构:
[coolcode lang=”php”]
docroot/
index.php
application/
default/
controllers/
IndexController.php
blog/
controllers/
IndexController.php
models/
views/

[/coolcode]
  然后在index.php里面写入类似下面的代码
[coolcode lang=”php”]
$front->setControllerDirectory(array(
‘default’ => ‘/path/to/application/controllers’,
‘blog’ => ‘/path/to/application/blog/controllers’
));
[/coolcode]

  可以通过 http://host/blog/controller/action 的方法来访问了。

Category: PHP / Zend  17 Comments

用zend framework完成了两个项目

  前段时间开始尝试使用zend framework进行真正的项目开发,分别完成了公司内部的客服系统和一个web2.0的项目,两个项目由于一个仅供内网使用,一个正在进行alpha测试,所以均暂时无法提供出来在网上访问,等alpha测试完成进入Beta测试后,我会公布出来。经过这两个项目后,对zend framework的理解加深了不少。

  Zf的确是个不错的框架,基于它开发的系统逻辑和结构都非常清晰,不同的程序员很容易进行沟通和团队协作,在我的项目中主要采用了 Zend_Acl、Zend_Controller、Zend_Config、 Zend_Db、 Zend_Registry、Zend_Search_Lucene这几个模块,整个的实现完全按照MVC和纯粹的面向对象实现,在项目中整合了Smarty到Zend_View,整合Memcached到Cache,自己继承并扩展了Zend_Controller_Action的功能,主要进行一些针对各个Controller都需要的功能进行统一处理,比如基于Acl进行权限验证。同时我还借用了PEAR的一些组件,比如Http、Benchmark模块。

  这次的两个项目都基于Zf 0.9.2 实现,最近升级到了0.9.3。最早我一直犹豫是否使用Zf,主要原因是它的Search_Lucene模块对UTF8的支持不够好,加上Zend_Db的部分功能未能满足我的需求,直到0.9.2版的发布我才下了决心使用,在项目中使用的Zend_Lucene全文检索从目前来看,功能和效果都感觉不错,还没有进行大规模的性能测试,而Zend_Db我进行了扩展,增加了对MySQL的Master/Slave以及Cluster的支持。

  从团队开发、架构设计、代码规范、开发成本和周期等方面考虑,建议有条件的朋友都可以尝试一下Zf,尤其是一些类似MIS系统的BS项目,用Zf一定能事半功倍。在大型商用Web项目开发中,使用Zf也是完全可以的,性能方面等我那个项目投入使用后给出参考数据,我目前自己debug测试的结果来看,效率还是非常不错的,有可能Router方面会稍微多一些消耗,不过应该是可以接受的范围。

  最后值得一提的是Zend_Config_Ini模块个人感觉很不错,支持数字作key,可以很方便的配置出灵活的配置文件,推荐使用之 🙂

  如果有必要,我考虑后续把我的Index.php公布出来供大家参考:)

Category: PHP / Zend  29 Comments

Zend Framework Beta 0.9.0

March 17, 2007
  We are very proud to announce Zend Framework Beta Release version 0.9.0. This is the first Beta Release for Zend Framework. Most components have graduated from the incubator to the core library, the class interfaces are stabilizing, and the documentation and tests have been improved significantly.

  Some of the highlights and new developments in this release are the following:

  • MVC: view integration, output buffering;
  • Zend_Auth: new authentication adapters;
  • Zend_Db_Table: object-oriented enhancements;
  • Zend_Db_Select: enhanced interface, new documentation;
  • Zend_Db_Adapter_Mysqli: native adapter moved to core;
  • Zend_Feed: adds a class to produce an RSS/Atom feed;
  • Zend_Mail: more features for handling messages in folders;
  • Zend_Search_Lucene: now matches the performance of Java Lucene
  • Zend_Service_Audioscrobbler, Zend_Service_Delicious, Zend_Service_Simpy: moved to core;
  • Zend_Translate: moved to core, new message storage adapters;
  • Zend_Validate: improvements to validators for email address and hostnames;
  • Zend utility classes: refactored design
  • Zend_Log (incubator): fully object-oriented redesign
  • Zend_Memory (incubator): for managing data structures in a low-memory environment
  • Many other enhancements to test suites and documentation.

Download Zend Framework Beta 0.9.0!

The changelog highlights the most significant changes to the Zend Framework.

期待Zend Framework的Release 1.0

  前不久试用了Zend_Framework Beta0.7.0的几个主要模块,感触很多,PHP未来在Web项目上的前景是很多人不能想象的,尤其在面对大型WEB应用、企业BS大型软件等方面,Zend Framework给了我们很大的想象空间。

  Zend Framework由Zend官方团队提供支持,并且提供开放的使用协议,该框架完全基于PHP5来开发和实现,提供了完全的面向对象架构,完整的Exception实现,类似Java的try catch处理,就它本身来说,就是一个PHP5标准的OO教程,在Zend Framework上,使用了不少我们在23种经典设计模式中熟悉的典型模式,比如Factory模式、Singleton模式在Zend Framework中被大量使用。
ZendFM

  在我对0.7.0的试用中,发现Zend_Search_Lucene模块最大的问题就是UTF-8以及中文的支持问题,同时基于PDO的Zend_Db模块还不是很稳定,经过我测试,在同一个应用中使用多个DB多个Server的情况下,会有些奇怪的问题发生,虽然如此,这个Framework依然让我非常兴奋和期待。

  前两天Zend Framework发布了Beta0.8.0,从Changelog里面可以看到很多的改进和新功能的实现,在Search模块上也有了很多改进,最近有空了准备再测试一下。不过就目前来说,把Zend Framework应用到商业产品里面,还是建议等待Release 1.0发布后再行动,目前做做测试和熟悉倒是不错。

  事实上,PHP领域里面,我至今最喜欢的就是PEAR,我写过的很多PHP的应用大部分都基于PEAR来实现,这个类似PERL领域CPAN库的PHP模块仓库,聚集了大量PHP高手的结晶,PEAR实现了基于PEAR_Error的错误处理框架,这在我写的东西里面被完全使用,PEAR中HTTP、Benchmark、NET、Mail、Soap等模块已经在我很多项目中让我受益匪浅。

  前一段写过的一个东西,我基于PEAR,并整合了Zend Framework的部分模块进来,比如Zend_Config模块,我把它从Zend Framework里面剥离出来,修改了部分代码整合到PEAR里面来,我用它来实现了我底层的Config配置对象,从目前的情况来看,效果很好。

  期待Release 1.0 !

Category: PHP / Zend  2 Comments

Memcached和Lucene笔记

  前段时间完成的项目使用了大量的Memcached,整个架构在性能上的确提高了很多,的确不是一点点的提高,面向大负载访问的时候,MySQL数据库仍然可以做到轻量级的负载,效果不错,建议有条件的朋友一定要把项目改造到Memcached上,著名的Vbb论坛当前的版本就已经开始支持使用Memcached进行论坛数据缓存。我原来在MOP的时候,我们也大量的采用这个东西。

  在使用Memcached方面,谈不上什么经验,反正极端的性能最大化就是使用永久的缓存,通过你的程序逻辑去控制和维护MC里面的缓存数据,我做的项目就是这样处理的,程序的逻辑的确增加了复杂度,但是对于商业项目来说,这种付出是非常值得的。

  Memcached唯一可能需要注意的是,他对key的操作不是原子级别的,所以在高并发处理的时候,对同一个key的写操作可能会导致覆盖,这个需要自己从程序逻辑上进行处理,这个理论我并没有深入研究,不过JH看了源代码给了我这样的结论,按照JH的实力和人品,我认为有80%以上的可信度:)

  对于Lucene,大部分人都不陌生,相关的技术也不用太多讲解,网上到处都是相关的文档。我最近想通过PHP来找到一个最佳的整合Lucene的方法,并且应用到正规的商业应用中,目前知道的可选方案是Pecl的Clucene模块和Zend Framework的 Zend_Search_Lucene 模块,这两个东西目前我使用的感觉都不算太好,另外还有一种是使用 PHP的 Java扩展支持(有两种,一种是php_java扩展,一种是php_java的 bradge方式),这个感觉也比较怪异,最后还有一种知道的办法就是使用系统调用 java 命令执行Lucene功能。 这个没有试过,不知性能可以达到什么程度。

  在这里做个记号,等有了进一步的收获补进来。

用apache的动态so模式编写和编译php扩展

看过我另外一篇关于用c语言编写php扩展so模块的朋友,应该已经了解大致的php模块编写过程,(原文:http://www.toplee.com/blog/56.html) 不过该文中没有专门针对已经安装好的系统进行说明,如何在现有apache、php运行环境下添加一个动态的so扩展,下面简单的整理一下。
more »

Category: PHP / Zend  Tags: , , ,  2 Comments

设置php的session分级存放后,phpMyAdmin运行不正常

  前一段把php的session进行了目录分级存放,详情见 http://www.toplee.com/blog/300.html ,总的来说效果不错,不过却在使用phpMyAdmin时遇到点小问题。

  首先是phpMyAdmin页面显示错位,然后是页面间_GET和_POST参数都不能正常传递,因为最近还修改了服务器上的一些别的配置,花了很长时间才定位到是session的问题,在phpMyAdmin的libraries/common.lib.php文件中进行debug,发现在session验证的地方总是出错,于是怀疑到php的session故障,不过由于其他应用中使用session都没有问题,应该是phpMyAdmin处理session方面的问题,打开 libraries/session.inc.php,可以看到一些处理session的ini设置项,在适当位置加入下面一行代码,问题得到解决。
[coolcode lang=”php”]
ini_set(‘session.save_path’,”your_session_save_path”);
[/coolcode]

  由此可以引出一些通用的问题,就是如果在php代码里面改变了ini中session的设置项,则一些关键的项都需要重新设定,php.ini中原来定义的设置就不会继续生效了,今后需要多加注意。

增加PHP的Session存储和处理能力

  可能很多PHPer都用到了PHP提供的Session功能,可以方便的进行会话功能处理,PHP服务端默认的session存储是文件存放方式,在Windows上PHP默认的Session服务端文件存放在C:\WINDOWS\Temp下,*NIX下默认存放在/tmp下,如果说并发访问很大或者session建立太多,在这两个目录下就会存在大量类似sess_xxxxxx的session文件,同一个目录下文件数过多会导致性能下降,并且可能导致受到攻击最终出现文件系统错误。针对这样的情况,PHP本身体提供了比较好的解决办法。
  不少朋友可能都没有注意到php.ini里面Session设置部分中有这样一项:
[coolcode linenum=”off”]
; session.save_path = “N;MODE;/path”
[/coolcode]
more »

Category: PHP / Zend  10 Comments

PHP的Session验证总是失败,没想却是ZoneAlarm搞怪

  今天调试一个基于PHP的Session验证的程序,发现总是登陆失败,debug发现Session注册没有成功,也就是cookie没有生成,以前很少遇到这样的问题,因为PHP的配置肯定是没有问题的,更为奇怪的是,这样的问题在IE和FireFox上会遇到,在TT浏览器上确正常了,折腾了半天才总算发现的问题所在。

  经过对TT和FireFox上页面返回源代码的对比,发现两者之间有差异,在IE和FireFox访问后的页面中,HTML源代码的Header部分总会被加入类似这样的一行代码
[coolcode linenum=”off” lang=”html”]

[/coolcode]
more »

Coolweather_rpc中XMLParser对PHP版本的兼容问题

  从 andot 的网站上找到一个不错的WP插件 coolweather,就是我页面右边那个Weather的东西,利用PHPRpc实现Ajax从 accuweather 的xml接口读取天气信息,经过解析和处理后显示到页面上,是个非常不错的插件。

  在andot写的插件中如果使用到了PHPRpc Server,默认都是在代码里面指向使用他服务器上的PHPRpc Server,这给很多朋友提供了方便,不过也给andot的服务器形成较大压力,导致最近总是服务器无法访问,也就致使andot提供的PHPRpc Server没法连接,也就无法正常返回Weather数据,于是我决定改到使用我自己服务器上的PHPRpc Server,却遇到一点麻烦。
more »

Category: PHP / Zend  3 Comments