日期:2014-05-17 浏览次数:20495 次
本文发出后,确实引起不少的争议。看来PHP的支持者不少啊。但是,从一个侧面来审视PHP,也未尝不可。
从php3到php4 到PHP5,再到PHP6,PHP确实越来越完善,功能也更强大。PHP为一开放源码项目,其中包括可以简化程序的描述性语言引擎以及一个大的链接库,也 有专门开发PHP的公司,如Zend就有销售PHP套装产品、程序撰写工具及技术支持服务。尤其是跨平台的使用特性将使它在linux平台大放异彩。可以 直接使用java的类库,可以直接调用perl/c等语言写的程序增强了它的可扩展性。越来越成熟的MVC开发框架使它能适应企业级的大型应用开发。再加 上它天生强大的数据库支持能力。确实博得了很多用户的喝彩!
不过,这里倒是想从侧面来看看PHP也许不称职的几个理由。
与 Java相较,PHP可用范畴限制较多,它仅能用在网络服务器上,不像Java,同时可用在网络服务器、个人计算机、手机、芯片卡或其它装置。记得有个老 友陈述放弃php的原因:“第一:每个变量前面要写一个$符号;?? 第二:因为不是编译执行的方式;? 第三:面向对象的功能不强。”比如,php的oop运行一次就退出,下次还要继续重建o,继续继承....。注意是每一次请求,它不能利用上一次的结果, 下一次用还要从头初始化。许多问题的根源还在于apache。
再一个:“可能目前php?? IDE不是很好,给别人入门难的感觉。”尽管新版本增加了面向对象功能,但相比成熟的Java,仍然有许多待改进之处。以至于有人这么归纳: (1)缺乏广泛的使用,以至于微软也要和大家讨论PHP到ASP.Net的迁移。(2)缺乏大公司的支持,象IBM的开发中心开源项目首页上的6个标题 中,PHP只有3个。 (3)缺乏重量级的应用,象Google和Yahoo用PHP(不是所有的产品)都是瞎玩。当然,我知道Taobao.com也是PHP做的。
在apache上的进程工作模式。 apache处理每一个php请求,都要创建一个子进程,这样的话实现连接池比较困难了,进程间的数据共享一般只能通过文件,数据库什么的完成,各项开销比较大,当然速度并不低。
还 是陈述一个网友的发言:“没有好的开发工具,调试起来过于复杂。虽然zend不错,但是哪里是VS的对手。没有强大的Visual 开发工具,换句话,如果有了,我绝对选择PHP。”这好像是和Java早期比较类似的一个情形。也许,在不远的未来,我们会看到很好的调试工具。问题是: 现在还没有太称心的,尤其是大型系统上。
还有个问题,就是共享内存的使用,我就不知道为什么直接使用php操作共享内存就这么复杂,而且速度居然比直接操作磁盘文件还慢。
看一个最近的新闻,和Php pdflib扩展绕过open_basedir安全限制漏洞有关。受影响系统:PHP PHP 5.3.0。 PHP 所使用的PDFLib扩展没有正确的强制基础PHP配置指令,这允许攻击者绕过open_basedir限制在非授权位置写入文件。仅在多个用户可以创建 和执行任意PHP脚本代码的共享托管配置中才会出现这个漏洞。在这种情况下,open_basedir限制应彼此隔离用户。
PHP V6 在添加一些新特性的同时,也删除了以前版本中的一些函数和特性。被删除的大部分东西,比如 register_globals
和 safe_mode
,
在当前的 PHP 中都被广泛认为是 “有漏洞的”,因为它们可能招致安全风险。当然,PHP的配置非常灵活,可以通过php.ini,
httpd.conf, .htaccess文件(该目录必须设置了AllowOverride
All或Options)进行设置,还可以在脚本程序里使用ini_set()及其他的特定的函数进行设置。通过phpinfo()和
get_cfg_var()函数可以得到配置选项的各个值。
老牌计算机作家Bruce Eckel也这么说:“你经常会发现很多使用PHP编写出的代码错误百出,但这些代码往往却被人们互相拷贝,却没有人去认真分析研究它们。这些代码通常是 由那些习惯互相借鉴拷贝代码的程序员所编写,这些代码质量低劣的原因是这些程序员通常不习惯问为什么,不喜欢弄清楚原理,只管拿来就用。”为了让大家可 信,我放出他的相片吧。
?
也 许有经验的PHP程序员最感到痛苦的地方是PHP的解释运行机制。这种运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。也就是 说,PHP在语言级别上没有办法让某个对象常驻内存。在PHP中,所有的变量都是页面级的,无论是全局变量,还是类的静态成员,都会在页面执行完毕后被清 空。以JSP为例,在JSP中,Java Bean的scope有四种有效值:Page、Application、Session、Request,分别对应页面、程序、会话、请求四种生存期。但 在PHP中,只有Page一种生存期。
在 PHP中,如果需要在页面之间共享数据,需要手动将变量保存到预定义的全局变量$GLOBALS或$_SESSION中。PHP会将这些变量保存在某个文 件中,以便下次执行页面时读取。但是,这种方式存在着极大的限制,除了效率的低下外,它还无法保存引用外部资源的变量,例如文件、Socket、数据库连 接等,而正是这些资源最需要被缓存。
这 导致了许多高级的模式和技术无法使用。例如,即使是最简单的Singleton模式也无法在PHP中被应用。虽然可以使用PHP写出Singleton的 代码,但是由于PHP中没有真正全局的static变量,所以每次页面被执行时,都会重新建立新的对象,这样也就完全失去了Singleton的意义。这 也导致复杂的OR Mapping技术难以应用,因为没有对象的缓存机制,OR Mapping的开销已经使这种技术失去了意义。
对 于从事PHP开发的同志们来说,Mysql的重要性是显而易见的。还是老牌计算机作家Bruce Eckel的一个观点:PHP主要是与数据库搭配使用,数据库来处理所有一致性问题,因此多数人只关心从数据库中存取数据,而不用再去必须考虑底层的问 题。但是这个语言不仅仅可以处理与数据库交互的上层问题,同样也可以实现与文件系统之间交互的底层问题。我的感觉是,在PHP社区中多数人只关心如何得到 一个好的结果,而没有多少人关心它的真正实现原理,因此才出现了这种错误的倾向。
再看一个新闻(2008-1-21 ):国外媒体今天发表分析文章称,Sun之所以斥资10亿美元收购开放源代码软件公司MySQL,主要是为了进军Web2.0软件市场。Sun周三宣布, 该公司已经同MySQL达成最终协议,将以10亿美元收购这家开放源代码软件厂商。从交易价值来看,这是迄今为止开放源代码领域最大的交易,其规模甚至接 近之前所有开放源代码交易的总和,包括红帽以3.26亿美元收购JBoss,Citrix以5亿美元收购XenSource,以及雅虎以3.5亿美元收购 Zimbra。
在《Sun总裁博客:我们为什么收购MySQL》一文中,Sun总裁提出:除了要收购 MySQL,Sun 将提出面向 MySQL 市场的全球支持解决方案。我们将同时在社区和市场两方面注入资金 —— 以加速本行业由专属技术阶段向开放式网络平台阶段转化的进程。并认为:新创公司和网络公司的 CTO 不同意使用收费的非开源产品。他们需