目录
1.应用范围仍然有限
2.调试还是不太方便
3.主流版本的安全漏洞百出
4.大型系统的稳定性与一种语言的风格
5.PHP的解释运行机制
6.前途未卜,开源的商业模式到底能撑多久?
首页 后端开发 php教程 大型系统下PHP不称职的六个理由(拍砖激辩中)

大型系统下PHP不称职的六个理由(拍砖激辩中)

Jun 13, 2016 pm 01:03 PM
http java mysql php zend

大型系统上PHP不称职的六个理由(拍砖激辩中)

本文发出后,确实引起不少的争议。看来PHP的支持者不少啊。但是,从一个侧面来审视PHP,也未尝不可。

从php3到php4 到PHP5,再到PHP6,PHP确实越来越完善,功能也更强大。PHP为一开放源码项目,其中包括可以简化程序的描述性语言引擎以及一个大的链接库,也 有专门开发PHP的公司,如Zend就有销售PHP套装产品、程序撰写工具及技术支持服务。尤其是跨平台的使用特性将使它在linux平台大放异彩。可以 直接使用java的类库,可以直接调用perl/c等语言写的程序增强了它的可扩展性。越来越成熟的MVC开发框架使它能适应企业级的大型应用开发。再加 上它天生强大的数据库支持能力。确实博得了很多用户的喝彩!

不过,这里倒是想从侧面来看看PHP也许不称职的几个理由。

1.应用范围仍然有限

与 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做的。

2.调试还是不太方便

在apache上的进程工作模式。 apache处理每一个php请求,都要创建一个子进程,这样的话实现连接池比较困难了,进程间的数据共享一般只能通过文件,数据库什么的完成,各项开销比较大,当然速度并不低。

还 是陈述一个网友的发言:“没有好的开发工具,调试起来过于复杂。虽然zend不错,但是哪里是VS的对手。没有强大的Visual 开发工具,换句话,如果有了,我绝对选择PHP。”这好像是和Java早期比较类似的一个情形。也许,在不远的未来,我们会看到很好的调试工具。问题是: 现在还没有太称心的,尤其是大型系统上。

还有个问题,就是共享内存的使用,我就不知道为什么直接使用php操作共享内存就这么复杂,而且速度居然比直接操作磁盘文件还慢。

3.主流版本的安全漏洞百出

看一个最近的新闻,和Php pdflib扩展绕过open_basedir安全限制漏洞有关。受影响系统:PHP PHP 5.3.0。 PHP 所使用的PDFLib扩展没有正确的强制基础PHP配置指令,这允许攻击者绕过open_basedir限制在非授权位置写入文件。仅在多个用户可以创建 和执行任意PHP脚本代码的共享托管配置中才会出现这个漏洞。在这种情况下,open_basedir限制应彼此隔离用户。

PHP V6 在添加一些新特性的同时,也删除了以前版本中的一些函数和特性。被删除的大部分东西,比如 register_globalssafe_mode , 在当前的 PHP 中都被广泛认为是 “有漏洞的”,因为它们可能招致安全风险。当然,PHP的配置非常灵活,可以通过php.ini, httpd.conf, .htaccess文件(该目录必须设置了AllowOverride All或Options)进行设置,还可以在脚本程序里使用ini_set()及其他的特定的函数进行设置。通过phpinfo()和 get_cfg_var()函数可以得到配置选项的各个值。

4.大型系统的稳定性与一种语言的风格

有 人这么说(也是一个PHP读者的疑问):“大型系统还是用.net或者jsp吧,不是因为php不可靠,是因为开发php的人良莠不齐,而php的开发模 式又不固定,以你问这问题的情况来看,如果是多人开发,你肯定控制不好。.net或者jsp相对来说比较容易控制,可以让程序结构清晰,二次开发或者更换 程序员都不会有太大问题。”

老牌计算机作家Bruce Eckel也这么说:“你经常会发现很多使用PHP编写出的代码错误百出,但这些代码往往却被人们互相拷贝,却没有人去认真分析研究它们。这些代码通常是 由那些习惯互相借鉴拷贝代码的程序员所编写,这些代码质量低劣的原因是这些程序员通常不习惯问为什么,不喜欢弄清楚原理,只管拿来就用。”为了让大家可 信,我放出他的相片吧。

?

很自然,作为普通读者,会产生一个焦点问题:PHP到底有没有前途?你说有前途是把,再秀几点理由?

5.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的开销已经使这种技术失去了意义。

6.前途未卜,开源的商业模式到底能撑多久?

对 于从事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 不同意使用收费的非开源产品。他们需要也想要获取源代码以实现优化和快速解决问题(尽管他们乐于对其认为有价值的支持服务付费)。另一方面,更多传统 CIO 不同意使用不受商业关系背景支持的产品―― 因为他们更放心借 Sun 供应商之手来管理全球性业务和关键基础架构。

仔细分析一下吧。 还是那句老话,你也许认为PHP是免费的,所有的在手册中提到的PHP模块也是免费的。但是,如同一个有生命力的产品一样,免费的东西,也许会有很多理念的不统一。

?

?

一个晚上,评论无数。反对的意见也不是不接纳,这里先展示一个老友的反驳意见:

? 1.?? 面向对象不足??
? 如果你使用过PHP 5的话,你就不会这样说了,你所想到的东西:访问权限(public/private)、继承、抽象类、接口、克隆、串行化、自动垃圾收集、静态成员、强大的异常处理...??
? 可以说基本上常见的面向对象的东西都有了,不要以为php5很遥远,其实目前有很多人、很多项目都在使用PHP 5,你最好自己尝试一下看看。??
? 建议参考:??
? http://www-128.ibm.com/developerworks/cn/opensource/os-phpobj/??
? http://www-128.ibm.com/developerworks/cn/opensource/os-advphpobj/??
? 2.?? 变量名前面加?? $???
? 这个只能算是一个小问题,是PHP告诉大家这是PHP独特特征的地方,PHP不是Java,不是C++,它是从开源世界走出来的脚本语言,有了$,我觉得很亲切,很棒。??
? 3.?? 不是编译执行??
? 这个当然比不上CGI了,如果你用C写CGI的化,但是我想,PHP的执行速度不会比JSP差到哪里去的吧,也不会比ASP慢。另外,Zend有相关的商业工具来作类似于编译的工作。??
? 4.?? PHP太灵活??
? 我想,谁都比较喜欢能够自由控制的语言,这样才能体现程序员的技术,当然,灵活也会带来很多问题,比如很容易出错,而且不容易找到,对于初学者的代码可能会写的很糟糕。但是,这就是PHP呀,这才是我们心目中开源的、自由的、高效的PHP??
? 5.?? 没有MVC框架??
? 呵呵,如果你使用过?? phpCake、Zend?? frame的话,我想你不会说没有框架,只是成熟程度的问题,其实Cake和Zend?? frame都非常棒,当然,另外一些象?? Prado、phpMVC等框架也是值得一提的??
? 参考:http://framework.zend.com/、http://cakephp.org/??
? 6.?? 没有好的IDE??
? PHP的特点就是简单,容易开发,你可以使用记事本,vi,也可以使用Editplus、UE,同样也可以使用Nu、Zend等等工具,选择很大,其实不 要跟VS2003比较,因为他们不是一个东西,VS是个统一开发平台,PHP只是一门脚本语言,使用Zend已经足够了,至少我是这么觉得。??
? 7.?? 扩展不容易写??
? 呵呵,我想ASP的com也不是那么好写的,JSP里面的JavaBeans也不是那么简单的,没有很容易的事情,简单或者复杂程度取决于你对一项事务的 认识程度。如果你C学的好,你就不会觉得扩展不好写。当然,相对来说,用C写PHP扩展是稍微有点复杂,不过,因为复杂,所以你才能靠写扩展拿高薪呀,呵 呵。??
? 建议参考:《PHP程序设计》第十四章[扩展PHP]??
? 8.?? 调试不方便??
? 我不知道怎样算是调试方便,如果你使用过ruby、perl写cgi,你会知道什么是调试不方便。如果你喜欢写C,使用GDB之类的命令行工具,你会知道什么是不方便。当然了,相对来说,你使用好的IDE,调试的工作量会减少很多的。?

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Laravel的地理空间:互动图和大量数据的优化 Laravel的地理空间:互动图和大量数据的优化 Apr 08, 2025 pm 12:24 PM

利用地理空间技术高效处理700万条记录并创建交互式地图本文探讨如何使用Laravel和MySQL高效处理超过700万条记录,并将其转换为可交互的地图可视化。初始挑战项目需求:利用MySQL数据库中700万条记录,提取有价值的见解。许多人首先考虑编程语言,却忽略了数据库本身:它能否满足需求?是否需要数据迁移或结构调整?MySQL能否承受如此大的数据负载?初步分析:需要确定关键过滤器和属性。经过分析,发现仅少数属性与解决方案相关。我们验证了过滤器的可行性,并设置了一些限制来优化搜索。地图搜索基于城

MySQL安装时提示缺少依赖项如何解决 MySQL安装时提示缺少依赖项如何解决 Apr 08, 2025 pm 12:00 PM

MySQL安装失败通常因缺少依赖项导致。解决方法:1.使用系统包管理器(如Linux的apt、yum或dnf,Windows的VisualC Redistributable)安装缺失的依赖库,例如sudoaptinstalllibmysqlclient-dev;2.仔细检查错误信息,逐一解决复杂的依赖关系;3.确保包管理器源配置正确,能访问网络;4.对于Windows,下载安装必要的运行库。养成阅读官方文档和善用搜索引擎的习惯,能有效解决问题。

使用 AWS 蓝/绿部署以零停机时间缩减 MySQL RDS 数据库的存储 使用 AWS 蓝/绿部署以零停机时间缩减 MySQL RDS 数据库的存储 Apr 08, 2025 pm 12:42 PM

DevOps工程师常面临RDS数据库优化与更新的挑战,尤其在高负载情况下,传统方法易导致停机风险。本文介绍AWS蓝/绿部署策略,实现RDS数据库零停机时间更新。告别数据库更新停机噩梦!本文将详细讲解蓝/绿部署策略,并提供AWS环境下的操作步骤,助您在不影响服务可用性的前提下,更新RDS数据库实例。准备工作首先,协调开发团队,选择工作负载流量最低的时段进行更新。良好的DevOps实践建议提前通知团队。本例演示如何利用蓝/绿部署,在零停机时间内缩减数据库实例存储空间。您可以通过AWSRDS控制台

MySQL安装后服务无法启动的解决办法 MySQL安装后服务无法启动的解决办法 Apr 08, 2025 am 11:18 AM

MySQL拒启动?别慌,咱来排查!很多朋友安装完MySQL后,发现服务死活启动不了,心里那个急啊!别急,这篇文章带你从容应对,揪出幕后黑手!读完后,你不仅能解决这个问题,还能提升对MySQL服务的理解,以及排查问题的思路,成为一名更强大的数据库管理员!MySQL服务启动失败,原因五花八门,从简单的配置错误到复杂的系统问题都有可能。咱们先从最常见的几个方面入手。基础知识:服务启动流程简述MySQL服务启动,简单来说,就是操作系统加载MySQL相关的文件,然后启动MySQL守护进程。这其中涉及到配置

mysql安装后怎么优化数据库性能 mysql安装后怎么优化数据库性能 Apr 08, 2025 am 11:36 AM

MySQL性能优化需从安装配置、索引及查询优化、监控与调优三个方面入手。1.安装后需根据服务器配置调整my.cnf文件,例如innodb_buffer_pool_size参数,并关闭query_cache_size;2.创建合适的索引,避免索引过多,并优化查询语句,例如使用EXPLAIN命令分析执行计划;3.利用MySQL自带监控工具(SHOWPROCESSLIST,SHOWSTATUS)监控数据库运行状况,定期备份和整理数据库。通过这些步骤,持续优化,才能提升MySQL数据库性能。

mysql安装后怎么使用 mysql安装后怎么使用 Apr 08, 2025 am 11:48 AM

文章介绍了MySQL数据库的上手操作。首先,需安装MySQL客户端,如MySQLWorkbench或命令行客户端。1.使用mysql-uroot-p命令连接服务器,并使用root账户密码登录;2.使用CREATEDATABASE创建数据库,USE选择数据库;3.使用CREATETABLE创建表,定义字段及数据类型;4.使用INSERTINTO插入数据,SELECT查询数据,UPDATE更新数据,DELETE删除数据。熟练掌握这些步骤,并学习处理常见问题和优化数据库性能,才能高效使用MySQL。

MySQL安装在特定系统版本上报错的解决途径 MySQL安装在特定系统版本上报错的解决途径 Apr 08, 2025 am 11:54 AM

MySQL安装报错的解决方法是:1.仔细检查系统环境,确保满足MySQL的依赖库要求,不同操作系统和版本需求不同;2.认真阅读报错信息,根据提示(例如缺少库文件或权限不足)采取对应措施,例如安装依赖或使用sudo命令;3.必要时,可尝试源码安装并仔细检查编译日志,但这需要一定的Linux知识和经验。最终解决问题的关键在于仔细检查系统环境和报错信息,并参考官方文档。

mysql下载文件损坏无法安装的修复方案 mysql下载文件损坏无法安装的修复方案 Apr 08, 2025 am 11:21 AM

MySQL下载文件损坏,咋整?哎,下载个MySQL都能遇到文件损坏,这年头真是不容易啊!这篇文章就来聊聊怎么解决这个问题,让大家少走弯路。读完之后,你不仅能修复损坏的MySQL安装包,还能对下载和安装过程有更深入的理解,避免以后再踩坑。先说说为啥下载文件会损坏这原因可多了去了,网络问题是罪魁祸首,下载过程中断、网络不稳定都可能导致文件损坏。还有就是下载源本身的问题,服务器文件本身就坏了,你下载下来当然也是坏的。另外,一些杀毒软件过度“热情”的扫描也可能造成文件损坏。诊断问题:确定文件是否真的损坏

See all articles