前言:
楼主只是刚刚接触php内核学习这个纯粹是个人兴趣,写博客也是为了记录下来学到的东西以便之后需要时查看,如有写的不好的地方还望各位大神不吝赐教。
PHP(外文名:PHP: Hypertext PReprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。 ------摘自百度
通常情况下PHP有两种被运行的模式:CGI:公共网关接口(Common Gateway Interface)、CLI:命令行界面(Command Line Interface),其他的方式如FastCGI这里先不讨论。关于CGI和CLI的相关内容参考以下文章http://blog.csdn.net/wmlml/article/details/47346201。
在平常的Web环境中,我们并不需要单独启动PHP,它一般都会作为一个模块自动加载到web-server里面去,如apache加载的php5.so。 只要我们启动了web-server,被一起加载的php便会和服务器一起解析被请求的php脚本。当然,这不是绝对的,当我们以fastcgi(详情参考http://www.cnblogs.com/lidabo/p/4212419.html)模式安装php的时候,往往就需要手动在终端运行php -b 127.0.0.1:9999或其它 命令来启动来启动php后端服务。
其实无论哪种模式,PHP的工作原理都是一样的, 都是作为一种SAPI在运行(Server application Programming Interface: the API used by PHP to interface with Web Servers)。当我们在终端敲入php这个命令时候,它使用的是"command line sapi"!它就像一个mini的web服务器一样来支持php完成这个请求,请求完成后再重新把控制权交给终端。
简单来说, SAPI就是PHP和外部环境的代理器。它把外部环境抽象后, 为内部的PHP提供一套固定的, 统一的接口, 使得PHP自身实现能够不受错综复杂的外部环境影响,保持一定的独立性
在PHP启动时,通常会有两种概念上的启动,一是PHP作为Apavhe的一个模块启动,Apache会加载一些扩展、常量、类、资源等等,这些东西都统一的被加载进内存中,直到Apache卸载PHP这个模块。所以通常使用php去编写的一些web脚本之所以不用编译除了和zend引擎的关系之外和PHP的第一次启动也有很大的关系。第二次启动是Apache分配过来一个页面请求时PHP的启动。
说完了启动就不得不说终止了,两次启动也对应了两次终止。当一个PHP脚本执行完毕时(也可能被die()exit())会有一次终止,与之对应的是上文的第二次启动,此时的终止仅仅释放了运行的PHP脚本中占用的内存资源,第一次启动的被当作Apache模块的内存并没有释放,直到我们告诉Apache对PHP进行stop命令时才会释放这部分内存。
对于上述的两次启动和终止的过程并不仅仅是讲到的那么简单,其中涉及了很多PHP预定义好的函数与扩展。具体内容网上已有非常详细和全面的介绍,本人这里不敢赘述。详情参考http://www.laruence.com/2008/08/12/180.html,http://www.cunmou.com/phpbook/1.2.md。
新闻热点
疑难解答
图片精选