`
yipsilon
  • 浏览: 244747 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

PHP会倒掉吗?

php 
阅读更多

最近有不少文章讨论PHP如何如何不好,如何如何不适应企业应用,如何如何会倒掉的问题。我也发表一下我的看法。

 

我认为PHP的最成功之处在于以下几点:

 

1. 相对简单的语:PHP的语法构成囊括了C、JAVA、PERL等,这使得熟悉这些语法的人可以很轻易地入门PHP语言,而其他语言则不同,除非用户在一门语言中有了一定的经验,再去学另一门语言能稍微轻松些,但是对于毫无经验的初学者,那是一个痛苦的过程。

 

2. 丰富的类库支持:PHP内置了非常多的函数,而且都使用统一的命名环境,这样PHP开发人员只需要打开PHP参考文档就可以查询到,不必像其他语言那样(如Java),不断地加入第三方类库及学习其使用方法。

 

3. 低廉的部署成本:因为PHP本身就是开源的,因此它使用的环境大多是开源或免费的,况且市面上集成产品很多,如XAMPP,一解压运行个自动安装程序,就可以使用了。再看其他的语言,Java产品中免费的有tomcat,它还是需要进行一些手工配置,且性能非常一般;而ASP.NET的它本身就是收费的,这里就不说了。

 

再者就是,PHP是专门针对网站的,这使得它把全部精力投入到如何优化网站上面,不管是语法结构还是解释引擎。而其他语言如Java或.net,他们是一套通用的语言,网站应用只是其一部分,网站快速开发和应用能力确实没有PHP强。

 

上面几点总结出一句话就是:不用高价的开发人员,不用配置很高的硬件服务器,就可以非常快速地构建网站应用。而这个速度,是其他语言所不能匹敌的。最简单的测试不过是拿一个同样功能的网站,让一帮初级程序员分别用PHP、JAVA、ASP.NET进行开发,看看开发和部署速度的差距就知道了。

 

你会发现,这应该就是PHP的魅力所在。

 

至于OOP,我觉得对于网站的应用来说,只要能以最快的速度满足客户要求就行了,任何产品如果无法满足客户的需求,那使用再好的技术也是扯淡,更何况如果不是大中型项目,OOP是会拖累开发进度的,而目前大部分网站应用来说,基本都是小型项目。

 

而企业应用,我觉得PHP完全可以胜任,因为PHP它内置了支持调用Java和.NET组件,如果自身不行,那就用别人的嘛,只要快速开发的本质不变就行。

 

至少,从我接触PHP的这段时间来看,个人认为它不会垮掉,因为网站应用还没有能像它一样简洁快速的语言出现。(不要说ruby了,它的学习门槛不低啊,而且运行环境配置起来也比较复杂,大部分常用类库也都是外置的)

分享到:
评论
177 楼 icewubin 2009-12-04  
axgle 写道
icewubin 写道
axgle 写道
icewubin 写道

写个程序,最多2000个网络并发,验证4000万个图片的有效性,用PHP写写看这种并发程序
如果我写爬虫,往往会搞个10-2000个网络并发线程不等(当然前提跑爬虫的服务器网络带宽足够),PHP如何写?

php并发?简单,只是我不告诉你,呵呵。除非,你请客,或者寄钱来最好,包你满意。

我说的是2000个线程,不是PHP那种伪的多线程或者多进程(而且要也能在windows下运行的)。

java多进程如何写?其实java多线程也不错的。个人比较喜欢多进程。

1.Java不能多进程,至于JVM是否能利用OS的多核,要看不同OS版本对应的JVM的策略,表面上看是单进程,只要能利用多核以及OS的非阻塞API就OK。

2.多进程在大多数操作系统中,切换开销很大,一般很难把并发提高到2000这个级别并且很流畅。

3.不过说起来,我在windows下,可以跑2-3个JVM(相当于2-3个进程),每个JVM 2000个线程,实际效果也达到了4000-6000个线程,linux下可能可以更高,可惜用的是单位同事的机器,都是windows,windows的网络并发确实比较烂。

4. 4G内存的Linux(CentOS 5)下,使用java的mina框架(基于非阻塞网络IO),实际测试可以用500个线程,能支持3.5万个长连接并发(广播200个汉字以内的文字消息),受限于32位JVM的内存使用上限,没有继续测下去,如果服务器内存加到8G或16G,使用64位的JVM,在做文字直播这种应用的时候(客户端flash,使用socket长连接),可以到更高的并发。上面第3点说的2000个线程其实就是我写的模拟的客户端。

有人说erlang并发能力更强,不过没亲眼见过真实案例,总觉得虽然erlang理论并发能力强,但是实际运行会有其他瓶颈,而且erlang的虚拟机能否充分利用多核,也是个问题。
176 楼 axgle 2009-12-04  
icewubin 写道
axgle 写道
icewubin 写道

写个程序,最多2000个网络并发,验证4000万个图片的有效性,用PHP写写看这种并发程序
如果我写爬虫,往往会搞个10-2000个网络并发线程不等(当然前提跑爬虫的服务器网络带宽足够),PHP如何写?

php并发?简单,只是我不告诉你,呵呵。除非,你请客,或者寄钱来最好,包你满意。

我说的是2000个线程,不是PHP那种伪的多线程或者多进程(而且要也能在windows下运行的)。

java多进程如何写?其实java多线程也不错的。个人比较喜欢多进程。
175 楼 xieye 2009-12-04  
坚决支持ice!虽然线程不是很懂。。
174 楼 icewubin 2009-12-04  
axgle 写道
icewubin 写道

写个程序,最多2000个网络并发,验证4000万个图片的有效性,用PHP写写看这种并发程序
如果我写爬虫,往往会搞个10-2000个网络并发线程不等(当然前提跑爬虫的服务器网络带宽足够),PHP如何写?

php并发?简单,只是我不告诉你,呵呵。除非,你请客,或者寄钱来最好,包你满意。

我说的是2000个线程,不是PHP那种伪的多线程或者多进程(而且要也能在windows下运行的)。
173 楼 axgle 2009-12-04  
icewubin 写道

写个程序,最多2000个网络并发,验证4000万个图片的有效性,用PHP写写看这种并发程序
如果我写爬虫,往往会搞个10-2000个网络并发线程不等(当然前提跑爬虫的服务器网络带宽足够),PHP如何写?

php并发?简单,只是我不告诉你,呵呵。除非,你请客,或者寄钱来最好,包你满意。
172 楼 icewubin 2009-12-04  
smiletuna 写道
icewubin 写道
突然想八卦一下,看看即可。

黑莓的OS和GPhone的Android都是Linux+Java的,尤其是Android,虽然JVM是定制的,但是基本和J2SE一致。

我突然很八卦的想,在ARM这么“弱”的CPU上跑应用,不知道跑PHP会怎么样(牛头不对马嘴啊)。


php的解释器 占资源很小。能移植就问题不大。

以前我常用 php写脚本 做爬虫。最近才改用python...

如果我写爬虫,往往会搞个10-2000个网络并发线程不等(当然前提跑爬虫的服务器网络带宽足够),PHP如何写?
171 楼 smiletuna 2009-12-04  
icewubin 写道
突然想八卦一下,看看即可。

黑莓的OS和GPhone的Android都是Linux+Java的,尤其是Android,虽然JVM是定制的,但是基本和J2SE一致。

我突然很八卦的想,在ARM这么“弱”的CPU上跑应用,不知道跑PHP会怎么样(牛头不对马嘴啊)。


php的解释器 占资源很小。能移植就问题不大。

以前我常用 php写脚本 做爬虫。最近才改用python...
170 楼 四不象 2009-12-04  
语言之争是宗教战争,争不出真理的。

不过从我现在对PHP使用的情况看来,感觉PHP挺垃圾的,也就比ASP好点吧
169 楼 icewubin 2009-12-04  
coolcoolhot 写道
icewubin 写道
突然想八卦一下,看看即可。

黑莓的OS和GPhone的Android都是Linux+Java的,尤其是Android,虽然JVM是定制的,但是基本和J2SE一致。

我突然很八卦的想,在ARM这么“弱”的CPU上跑应用,不知道跑PHP会怎么样(牛头不对马嘴啊)。

http://mobileleap.net/hph/
没有什么不可能的,php照样可以将手机终端作为服务器,让你失望了!!!!

你不要这么激动行么?我有说作为服务器么?Android和黑莓的OS有作为服务器的功能么?

只不过对比手机的应用和UI编程语言而已。
168 楼 刃之舞 2009-12-04  
我的天啊,好多强大的PHPER啊,你们太牛了,我们做的java的很可怜的别拿我们比了,我们java其实很烂的真的没PHP好,但是不知道为什么那么多傻叉公司就喜欢用java呢,这个不是我们的错了,要怪谁呢?只能怪客户都喜欢这个吧
167 楼 coolcoolhot 2009-12-04  
icewubin 写道
突然想八卦一下,看看即可。

黑莓的OS和GPhone的Android都是Linux+Java的,尤其是Android,虽然JVM是定制的,但是基本和J2SE一致。

我突然很八卦的想,在ARM这么“弱”的CPU上跑应用,不知道跑PHP会怎么样(牛头不对马嘴啊)。

http://mobileleap.net/hph/
没有什么不可能的,php照样可以将手机终端作为服务器,让你失望了!!!!
166 楼 icewubin 2009-12-04  
突然想八卦一下,看看即可。

黑莓的OS和GPhone的Android都是Linux+Java的,尤其是Android,虽然JVM是定制的,但是基本和J2SE一致。

我突然很八卦的想,在ARM这么“弱”的CPU上跑应用,不知道跑PHP会怎么样(牛头不对马嘴啊)。
165 楼 ry.china 2009-12-04  
yipsilon 写道
biAji 写道
没觉得Java性能不好

没觉得Ruby学习门槛高


这两个语言都是相对于PHP来说的,java本身性能不错,但是其流行的开源JSP/Servlet引擎tomcat/jetty等性能都不高啊,不信你测试一下就知道了。ruby同理。


老兄你怎么个测试法的可以说明一下吗
164 楼 izat 2009-12-04  
这个,我最近喜欢上爬楼了?刚才还爬了个几十层的
163 楼 fnet 2009-12-03  
在一片吵闹中、在一片质疑中,PHP(版)竟然“火”起来了 。。。

 
162 楼 逍遥虾 2009-12-01  
讨论如此热烈,偶也飘过下:
偶从Java走到php,可以说俩者寸长寸短吧……
161 楼 lyw_988 2009-12-01  
PHP会不会掉应该说是肯定不会的,汇编语言现在在硬件编程领域还是很流行的,但是PHP也一样,必然会慢慢从支持多个领域退出到支持某个领域,由广泛被应用到特定的应用。这个时间可以说每个语言都会经历,差别在于这个时间是多长而已。
160 楼 icewubin 2009-11-30  
<div class="quote_title">yipsilon 写道</div>
<div class="quote_div">
<div class="quote_title">icewubin 写道</div>
<div class="quote_div">
<p>1. 恩?上百兆?举个例子先?我刚才随便找了个典型应用,看了下类库lib目录下总共才35MB,而且有不少是开发辅助、或者是编译优化、或者是JUnit相关,发布出来的war只有12MB都不到。</p>
<p>几百兆?你是从哪里看来的?举个例子先?</p>
<p> </p>
<p>2. 这是一方面,另一方面,java类库加载的时候,只会加载用到的class和其相关的class,是按需加载的,不是你认为的一个类库直接加载到内存(执行环境),这方面你应该多了解一下java的ClassLoader机制。</p>
<p> </p>
<p> </p>
</div>
<p>1. 我说的是J2EE容器,比如像最流行的JBoss,4.2版就有147M,商业版的那几个就更不用提了。你说的GlassFish社区版还好些,不过企业版也超百了。打开每个项目页里的下载栏目就可以看到。</p>
<p> </p>
<p>2. 类加载这块儿貌似在官方网站上看的吧,说Hotspot Server是会把所有可需要用到的类加载到内存中,然后进行优化的。至于ClassLoader,我觉得自己还算熟悉吧,因为公司兼容OSGi R4.2规范的OSGi运行环境是我主持开发的,blog里提到过。</p>
</div>
<p>1.<strong>超级汗哪,如果你认为JBoss有147MB,就占用147MB内存的话,那windows7 32bit版本也要5G左右,是不是也要吃5G内存啊,有这么推论的么?</strong></p>
<p> </p>
<p>2.不可能的,classloader是按需加载的。</p>
<p> </p>
<p>还可以举其他例子:例如jdbc中经典的一句话,Class.forName("xxxx"),xxxx驱动类路径,如果照你说的是全部加载到内存的话,为何还需要有时候自己定制classloader,为何还需要Class.forName方法确保class的加载?</p>
<p> </p>
<p><a href="/topic/136427">http://www.iteye.com/topic/136427</a></p>
<p><strong></strong></p>
<p>您到底是做PHP的,还是搞Java的啊,OSGI的也研究?(OSGI不解决分布式计算的问题,只能单机用,没有太大的价值)</p>
<p><strong><br></strong></p>
159 楼 icewubin 2009-11-30  
yipsilon 写道


icewubin 写道
3. 不明白你说的“弊端”指什么?如果是多线程模型的话,java早期版本就是很强的,相比其他语言(erlang这种不算),1.5新加入的包只是进一步增强而已吧,不代表以前的java多线程编程就很弱,如果说是网络IO模型的话,之前已经详细分析过了,牵涉到Linux的epoll模型的发布,c版的webserver先用上了,JVM跟进的稍晚而已。

3. 新的LINUX版JVM的NIO就是实现的EPOLL,但如果你因为某些原因不用NIO呢,根本享受不了这优势,那劣势就多了,例如性能低下、占用资源大等。

拜托不要老是动不动就冒出句“例如性能低下、占用资源大等”,这个没有关系的。
158 楼 yipsilon 2009-11-30  
<p>
</p>
<div class="quote_title">icewubin 写道</div>
<div class="quote_div">1. 廉价当然是PHP的优势啦,但是廉价也是讨论的前提啊,讨论的时候不能随随便便就把不廉价的优化方案拿进来吧。<br><br>2. asp或asp.net的虚拟主机也不贵吧,还有就是虽然讨论常说JSP,目前无论企业项目还是互联网项目,JSP基本没人用了,所以也不应该有什么JSP虚拟主机的说法。<br><br>一般是这样的,现在有很多虚拟主机,其实就是虚拟机,而不限定什么语言的,自己随便怎么整,我感觉(当然我的感觉可能不对)还是asp.net整起来,最快最方便。<br><br>3. 不明白你说的“弊端”指什么?如果是多线程模型的话,java早期版本就是很强的,相比其他语言(erlang这种不算),1.5新加入的包只是进一步增强而已吧,不代表以前的java多线程编程就很弱,如果说是网络IO模型的话,之前已经详细分析过了,牵涉到Linux的epoll模型的发布,c版的webserver先用上了,JVM跟进的稍晚而已。</div>

<p> 1. 那就用廉价的方案:你要是想加服务器,再加台廉价服务器就够了,不行就再加,反正都是廉价的服务器,都能达到相同的效果,这样的服务器价格你省一个月开发人员的薪水就能买起了。</p>
<p> </p>
<p>2. ASP/ASP.NET的主机其实比LINUX贵,但是中国有特殊国情,就不好说了。ASP.NET部署起来感觉也挺麻烦,动不动就出错,还得找原因,MS的老毛病还是没改。</p>
<p> </p>
<p>3. 新的LINUX版JVM的NIO就是实现的EPOLL,但如果你因为某些原因不用NIO呢,根本享受不了这优势,那劣势就多了,例如性能低下、占用资源大等。</p>

相关推荐

    秒盾代码 PHP5秒盾代码_5秒安全检查源码.zip

    隔一二天不能访问,网站的排名收录会掉的很厉害而且影响以后 正因为这样,出现了很多网络黑客专门以攻击他人网站谋生 今天就给大家分享一个能有效防止一下小 CC. 用过百度云加速服务的网站都知道,在第一次打开后...

    开源php搜索引擎-蜘蛛程序

    4. **索引建立**:将提取的关键词和对应的URL存储到MySQL数据库中,形成倒排索引,便于快速查找。 5. **查询处理**:当用户输入搜索词时,搜索引擎会根据这些词在索引中的位置返回相关网页。 在实际应用中,为了...

    php-poo:练习一些遵循SOLID原则PHP POO

    7. **SOLID原则的实际应用**:项目中可能会有各种示例,如使用接口来实现开闭原则,通过策略模式应用SRP,利用抽象类或接口实现LSP,以及如何在设计中避免违反ISP和DIP。 8. **面向对象设计模式**:SOLID原则通常与...

    php之75道经典逻辑思考题

    3. 将5升水壶中的水倒掉,然后将6升水壶中剩下的1升水倒入5升水壶中; 4. 再次将6升水壶装满水; 5. 用6升水壶中的水继续向5升水壶中倒水,直至5升水壶满,此时6升水壶中会剩下恰好3升水。 通过这种方式,我们可以...

    PHP读取文件内容后清空文件示例代码

    如果文件不存在,`fopen`会返回false。 接着,为了保证文件内容读取和清空操作的原子性,我们需要对文件加锁。在PHP中,可以使用`flock`函数来加锁,该函数同样需要文件句柄作为参数,并指明要加的锁类型。在示例...

    php 猴子摘桃的算法

    问题描述了一只猴子在连续十天内吃桃子的过程,每天吃掉剩下桃子的一半再加一个,到第十天时仅剩一个桃子。我们需要通过编程计算出猴子最初摘了多少个桃子。 解决这个问题的思路是从第十天开始往回推算,每次根据...

    Sphider-plus 2.2

    同时,它可能会过滤掉广告、重复内容和非正文部分。 4. **关键词提取与索引**:Sphider-plus 会分析网页内容,识别关键词,并建立倒排索引,这是一种快速查找文档中包含特定词的高效方法。索引过程可能包括词干提取...

    ecshop中如何添加限时抢购功能可以看到一个倒计时

    要实现ecshop中的限时抢购功能并展示倒计时,我们需要对ecshop系统的模板、后台管理文件以及数据库进行一些修改和添加相应的代码,以实现抢购倒计时的效果。以下是详细的实现步骤: 1. 修改商品详情模板文件,以便...

    代码解耦之道_黄朝晖_PHPCON2019.pdf

    里氏替换原则(Liskov Substitution Principle):子类型必须能够替换掉它们的父类型。 5. 开闭原则(Open/Closed Principle):软件实体应当对扩展开放,对修改关闭。 6. 最少知识原则(Least Knowledge ...

    grub4dos-V0.4.6a-2017-02-04更新

    --timeout=[x]=[y]=[color] 倒计时位置、颜色。单位:列,行,24位色彩。 2015-05-14(yaya) 改进 NTFS 文件系统: 对于驻留属性文件(小文件),可以写,也可用 blocklist 显示信息。 对于非驻留属性列表,...

    TU-training

    【标题】"TU-training" 指的可能是一个关于软件开发的培训项目,重点是讲解SOLID原则和Test-Driven ...通过参与这个项目,学员不仅会学习到理论知识,还能获得实际操作的经验,从而提高其作为专业PHP开发者的技能。

    JavaScript应用177例

    5.3.htm 倒计时效果 5.4.htm 模拟时钟 5.5.htm 显示农历日期 5.6.htm 温度计样式时钟 5.7.htm 位置固定的时钟 第6章(\cha06) 6.1.htm HTML事件绑定 6.2....

    就要来娱乐论坛动网7.1 SP1 1114修改版

    我不想就这么放弃掉了,不然心血白白浪费,发布完了,过几天就改PHP了,这个可以算是终结版吧,但如果大家有问题,只要我能帮忙的我一定尽力,希望大家能支持!管理员帐号:ID: admin PASSWORD:admin888音乐后台帐号...

    23种 设计模式---面向对象的基本原则

    3. 里氏替换原则(Liskov Substitution Principle, LSP):子类型必须能够替换掉它们的基类型。这保证了继承不会破坏原有的程序行为。 4. 接口隔离原则(Interface Segregation Principle, ISP):不应该强迫客户端...

    gdkp

    在GDKP中,团队成员通过击杀游戏内的高级首领获得金币,这些金币随后被用于竞拍首领掉落的稀有物品。这种方式旨在优化团队资源分配,提高玩家参与度和游戏体验。 在HTML方面,虽然GDKP本身与HTML(超文本标记语言)...

    Excel百宝箱8.0

    【禁止重复值】:可以指定某列不允许重复,指定后该列输入重复值时会自动提示 【标示重复值】:将重复出现的数据用不同颜色分别标示出来,不同重复值用不同颜色 【删除空白单元格所在行】:输入1则删除空白行(整行...

Global site tag (gtag.js) - Google Analytics