大概5年前,php开发的程序占据了因特网市场的80%以上,当时10个网站中有8个都是用php语言开发的。同样,在商业街平台上,php开发的商业街系统也占有很多市场,当然其中也有很多知名度高的电气商务网站。
说到PHP的开发,必须提到fastcgi和php-fpm,对PHP的性能起着重要的作用。
网络服务器
作为一种专门用于Web开发的ServicePlanet语言,PHP必须使用Web服务器来实现,常见的PHP架构有LAMP和LNMP,下图说明了PHP如何访问。
【mod_php模式】
可以看到,请求被发送到Apache,然后Apache解析PHP并将结果返回给客户端。在使用LAMP体系结构时,需要对Apache的配置文件httpd.conf进行修改。
phpx_module(xhpx_module(x为PHP版本号)。PHP是Apache的一个子模块,当请求访问PHP时,Apache调用phpx_module来解析PHP代码,这是可以理解的。增加:LoadModulephpx_modulePHP_ROOT/phpxapache2_2.dllllAddTypeappliaction/x-httpd-php.php,将下列语句改为DirectoryIndex.html,作如下修改:DirectoryIndex index.html index.htm index.php index.phtml
php_module如何解析PHP代码?-借助sapi
下图显示了Apache和PHP以及sapi之间的关系:
sapi是一个中间层,提供了与socket相似的外部通信接口,使PHP能够与其他应用程序进行数据交互。php_module为Apache和Nginx提供了很多sapi,为IIS提供了很多ISAPI,等等。
调用PHP的Apache执行过程:
apache->httpd->php_module->sapi->PHP
总而言之,借助php_module,Web服务器解析PHP执行的模式就是mod_php。
【fastcgi模式】
另一种方法来处理PHP的sapi,即提供cgi模式,现在cgi被fastcgi所取代。
叫做cgi,也就是commongatewayinterface。Web服务器收到请求后,发送给cgi程序(比如PHP的FastCGI)。CGI处理请求(解析PHP),然后将结果返回给Web服务器,再由Web服务器返回给客户端。
cgi的缺点在于,每个请求都有一个启动和退出过程,fork-and-execute模式饱受诟病,但同时出现大量并行请求时,它就会失败。
fastcgi的诞生弥补了这个缺陷,它借助提前启动等待请求来弥补这个缺陷,并且在完成响应之后不会退出,继续等待下一个请求。(未完待续)