根据W3Techs,我的Web服务器使用PHP的比例高达76.9%的Web服务器:
http://w3techs.com/technologies/overview/programming_language/all
我使用PHP的原因是惯于看到其他人在Web服务器上使用它。PHP到底是什么使它在Web服务器上无处不在?
(请注意,此问题与以下问题类似,但朝着不同的方向:为什么Java不用于现代Web应用程序开发?)
根据W3Techs,我的Web服务器使用PHP的比例高达76.9%的Web服务器:
http://w3techs.com/technologies/overview/programming_language/all
我使用PHP的原因是惯于看到其他人在Web服务器上使用它。PHP到底是什么使它在Web服务器上无处不在?
(请注意,此问题与以下问题类似,但朝着不同的方向:为什么Java不用于现代Web应用程序开发?)
Answers:
PHP是一种专门为Web编程设计的语言,它与最流行的开源数据库MySQL进行了内置集成。
容易入门:作为初学者,很容易使用PHP入门。用户只需要在现有的HTML文件中添加一些带有for循环的PHP标记,然后将其上传到服务器即可查看结果或错误消息。动态类型和关联数组使使用PHP更加容易。
易于使用:与Java之类的大多数解决方案相比,PHP无需编译,因此只需编写脚本然后将其上传到服务器,然后更新浏览器即可。
集成的数据库支持:(大多数)PHP具有对大多数流行数据库(例如MySQL)的内置支持,这意味着它很容易开始使用数据库,无需安装其他驱动程序即可使用mysql函数。基于Web的易于使用的管理工具PHPMyAdmin(于1998年发布)对于PHP与MySQL的成功结合也很重要。
具有大量用户基础的旧语言(自1995年以来): PHP早在1995年就很流行,因为它是为Web编程而设计的。从那时起,用户群不断扩大,现在有许多面向Web的框架和库可供使用。一些示例是Blogg系统和e-shopping平台。
廉价的托管:由于PHP已经存在很长时间了,并且在Linux和Windows上都可以正常运行,因此许多Web服务器都支持它。找到预装PHP的主机没有问题。
出于同样的原因,MySQL非常流行:它在正确的时间放置在正确的位置。
随着90年代Linux服务器的兴起,LAMP平台(Linux-Apache-MySQL-PHP)成为一种可靠且最重要的免费选择。
附带说明一下,当时使用MySQL。不久前,这是MySQL缺少的两个功能(在我看来,可能还有更多):
甚至不符合ACID(原子性-一致性-隔离-耐久性)要求的DB怎么会如此流行呢?与PHP的答案相同:在正确的时间正确的位置。
进一步阅读有关LAMP组件上的“正确放置正确时间”的信息:
我现在正在自学PHP,所以也许我可以回答。
一个PHP源代码文件可以包含HTML,JavaScript和PHP的混合,因此启动和运行简单的Web应用程序似乎很容易。更复杂的交互(在JSP情况下需要大量Java或在CGI-BIN情况下需要一些怪异的扭曲)由PHP内置函数提供:您甚至不必知道HTTP GET或POST是否称为代码,您的代码想知道的所有内容都驻留在_REQUEST或_SERVER或_COOKIE全局变量中。
PHP语言的解析和执行速度非常快,因此生成HTML时不会注意到性能大幅下降,而不仅仅是一堆静态HTML文件。
PHP解释器几乎对每个开源DBMS和许多专有DBMS都有库调用,因此使3层样式的Web应用程序看起来很容易。PHP解释器包括针对许多其他常见情况(也称为“用例”)的库调用,因此您不必自己编写大量代码,只需调用该库即可。因此,就像J2EE“企业应用程序”一样,问题从知道如何编写代码到知道如何查找库中的东西。这得益于非常体面的php.net PHP手册。
作为一种编程语言,PHP没有太多奇特的结构,或者与C,FORTRAN 4或Pascal之类的代码相差无几,因此已经知道一种语言的程序员可以轻松地选择PHP编程语言。
PHP成功的两个关键点:时机和对共享托管的关注。
最初,Web是静态的。Web服务器只能分发预生成的HTML,这显然在一段时间后还远远不够,因此1993年NCSA团队使用称为CGI的技术扩展了其Web服务器(Apache httpd的前身),该技术允许从Web服务器调用特定程序可以即时生成HTML(或其他内容)。人们可以做所有事情,这很棒。当时用于此目的的一种常用语言是Perl。Perl是一种文本处理能力强的语言,它是处理HTTP请求数据和生成HTML的关键属性。所以人们使用它。
但是有一个问题:对于每个请求,Web服务器都必须运行一个外部程序,Perl必须初始化并运行该脚本。这引起了一些头痛。解决方案是mod_perl即将到来。1997年。mod_perl是Apache Web服务器的模块,将Perl解释器直接嵌入到Web服务器进程中,因此不需要额外的启动。
但是,这种方法还是有一个问题:mod_perl非常强大,可以访问完整的服务器配置。您不能使用一台服务器来托管多个独立的客户端,因为它们很容易伤害其他人-是有意或无意中。这就是PHP来的地方。
PHP的构建方式使其可以作为Apache模块运行(因此每个请求都不会遇到启动问题),但是在请求之间不提供任何共享环境。完成请求后,所有信息都会丢失,并且对另一个虚拟主机的后续请求将被独立处理。PHP还提供了限制访问的功能(safe_mode,open_base_dir)。通过这种架构选择,公司可以将PHP安装在其服务器上,并为客户提供FTP(或类似权限)访问以上传其文件,从而使许多客户在一台机器上无需太多工作。这引起了竞争,导致基于PHP的托管的价格低廉,从而使PHP成为无处不在的平台。
另外,PHP比Perl有一些好处,例如允许混合HTML和PHP代码或直接访问请求变量(另请参见register_globals),这在Perl中比较难(开发人员喜欢自定义分析或对CGI.pm的依赖)。
在当时使PHP成功的另一个方面是Windows的良好支持。要在Windows上运行Perl或其他语言很困难,但是在那时,许多开发人员还不需要在家中使用Windows并使用虚拟化或容器。PHP确实可以在Windows上轻松运行,因此人们可以将其用于开发,然后打包文件并在Linux上进行部署。例如,使用Perl,您必须获得正确的Perl分发,然后检查所有可用的模块等。
那其他语言呢?诸如C或C ++之类的编译语言从未受到青睐,因为脚本能够更好地服务于快速发展的市场。Java已经存在,但是Java虚拟机需要更多的资源和共享托管,而PHP支持它几乎是不可能的。在硬件上的投资要高得多。ASP(作为ASP.Net的前身)已绑定到Windows平台,将其限制为已运行Windows且不担心许可成本且再次没有共享托管支持的组织。
生产出了其他各种不同的技术,但它们都是商业性的(冷融合或带有服务器端JavaScript的Netscape Server)限制了它们的影响范围,或者直到Ruby-on-rails出现时才出现,这可能是第一个接收大量注意,但是到那时,PHP已经在大型社区中非常流行,并且成熟的软件(例如Wordpress或Drupal)使其难以竞争-尤其是因为PHP的开发从未停止并且还在继续。