PHP这种语言很有意思,最初号称是创始人为了做一种简单好用的语言来做个人主页之用,开源之后没想到受到了很多人的追捧,形成一个开源社区,就这么发展壮大了,成为了一种编写Web应用的真正简单好用的语言。网上用PHP和MySQL实现的应用不计其数,好的也非常多,比如我这个个人主页使用的Wiki和Blog实现,就感觉非常好用。
要说语言本身的结构,倒不能算特别优秀,直到PHP5,加入面向对象的机制,也不能说很完善,很多应用还是在用过程化的函数式开发。但开源社区的力量就是强,有很多很多好用的程序库,对简单的应用只需拼凑一下就可以完成,十分方便。PHP还有一个关注她的公司Zend,做了很多性能调优、代码加密等方面的工作。最神奇的是,PHP这么简陋的语言结构,居然有很多模板库等等机制出来,编制了很多结构非常良好的PHP程序。
1. 有意思的程序
有个叫Limbo的程序很有意思,其本身是著名CMS程序Mambo的简化版,但是能够支持纯文本数据库。特别的地方在于,Limbo提供了纯文本数据库和Sql数据库之间的统一界面,无论使用的是哪一种后台,通过Limbo备份数据可以得到Sql语句,同时也可以把Sql语句导入恢复原先备份的数据。算是十分精巧的实现。可惜现在好像已经没有官方的维护者了。
2. 参考资料
3. 类库及工具
PHP的功能扩展库
- PEAR 是一个PHP扩展及应用的一个代码仓库,简单地说,PEAR就是PHP的CPAN,最强的是,这个东西好像是纯PHP的,也就是实现了PHP上的跨平台,不大需要依赖于PHP的扩展组件。
- http://lensphp.sourceforge.net/ 部分常用php类库。
- TCPDF 一个不需要二进制扩展的纯PHP实现的PDF生成库。
基于PHP的开发框架:
- CakePHP 一个PHP的AJAX框架,支持MVC结构。说实话,现在AJAX框架很多,基于PHP的AJAX框架同样很多,但很多是只支持PHP5的,而这个很难得地同时兼容PHP4和PHP5。CakePHP部分使用经验
- CodeIgniter 超轻量级的PHP MVC框架。其具体特点和可用性需要进一步调研来确定。
- 通过json界面使CI完成与ajax通讯的要点示例
- 出于安全考虑,CodeIgniter对get参数进行了很多限制,因此基本上中文信息没法通过get界面进行可靠的传输。
- 增强使用AzDG作为加密手法
- Kohana:基于 CodeIgniter 完成的纯 PHP 5 轻量级框架,也许比 CodeIgniter 的功能更全面一些。Kohana 英文官方主页
- supermini:徐同学自己搞的一个超轻量 PHP 开发框架,感觉很好!基本介绍文档参见:迷你PHP框架supermini简介
- Yii Framework:近期非常流行的一个 PHP 开发框架,声称面向 Web 2.0 ,但是具体情形不详。
PHP的单元测试解决方案:
- SimpleTest 提供Web和命令行两种界面的单元测试方案。传说比PHPUnit和PHPUnit2更好用一些。
纯文本文件为存储后台的数据库访问层:
- PHP Text DB API 支持SQL界面访问的以纯文本文件为后台的PHP数据库引擎,比较神奇,下载页面在这里,还提供小型的GUI管理器,只是据说这个引擎比较慢。
- PHP Text DataBase API 非SQL接口的纯文本数据库界面,简单易用是其优点。
- textSQL 提供了一个SQL语言的子集的操作界面,可能运行速度会比其他厂家的解决方案稍微快一点。
- Perfect Database File 2 纯PHP的SQL界面访问纯文本数据库的引擎。
- Flat-file SQL 同时应用于PHP和Perl的纯文本数据库引擎,具体情况还不了解。
- DBA 基于pear引擎实现的用PHP操作Berkeley DB的库。
- DBA_Relational DBA的表管理扩展,不知道是什么东西。
- Gladius DB 支持SQL92的子集和adoDB的纯文本文件存储的PHP数据引擎,而且这个库仍然在被更新。
PHP的SOAP类库:
- 高版本的PHP官方实现自己就带了SOAP实现;
- PEAR提供了自己的SOAP实现;
- nusoap是一个纯PHP的SOAP实现,优点是安装配置使用简单。
http客户端类:
安全相关:
- Pixy:免费的PHP代码检查工具。针对源代码分析跨站攻击和SQL注入的可能攻击点等。
我的PHP IDE选择:
- 有很多成熟的PHP IDE环境可供选择,而我用Eclipse习惯了,只取其中一种,也就是合并入Eclipse社区的PDT。安装最简单的办法是直接使用Zend提供的完整打包版,在Zend的PDT完整打包版,该页面也说明了如何使用Zend的PHP调试插件。另外只要在本地安装一套PHP的运行环境就行,同样有很多类似的带有Apache、MySQL的安装包可选,我用的是XAMPP,特别是其提供了一个免安装的绿色版本,使用十分方便。也许Xdebug这个组件也会对PHP程序的调试提供一些帮助。
4. 技术要点探讨
4.1 PHP的多进程互斥和锁定机制讨论
据说目前PHP并没有完善的线程支持,甚至部署到基于线程模型的httpd服务器都会产生一些问题,但即使是多进程模型下的PHP,也难免出现多进程共同访问同一资源的情况。比如整个程序共享的数据缓存,或者因为资源受限而必须对特定处理过程进行排队,以及针对每个用户生成唯一的某种标识的情形。PHP语言自身没有提供进程互斥和锁定机制,因而使得在这些情况下的编程遇到了困难,目前了解到的可选的办法有以下这些:
- 利用MySQL的锁定机制来实现互斥。缺点是增大了数据库服务器的连接负担,并且使得程序依赖于数据库服务才能正常工作。
- 利用文件锁机制。也就是利用flock函数通过文件实现锁定和互斥机制,来模拟通用编程模型下的锁定原语的工作方式。这种方式在以前以纯文本文件为存储引擎的时代成为保护数据完整性的必备元素,现在在使用文本文件作为缓存媒介的场合也相当常见。PmWiki应该也是使用了这个机制来对多人同时编辑一个页面的情形进行提醒。不过文件锁机制多少会调用到宿主操作系统上的文件锁特性,因此在使用时一定要检查服务器操作系统是否为PHP环境提供了完善可靠的文件锁机制。
- 利用共享内存空间计数。PHP可以利用shmop_open函数开辟一块内存空间,在服务进程之间共享数据,为了保证共享数据的互斥安全访问,可以使用sem_get、sem_acquire和sem_release这组函数实现共享计数锁定机制。这种办法在后台实际是调用了系统的ipc服务来实现。