PHP简介php
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸取了C语言、Java和Perl的特色,利于学习,使用普遍,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它能够比CGI或者Perl更快速地执行动态网页。用PHP作出的动态页面与其余的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比彻底生成HTML标记的CGI要高许多;PHP还能够执行编译后代码,编译能够达到加密和优化代码运行,使代码运行更快。程序员
PHP是通用服务器端脚本编程语言,其主要用于web开发以实现动态web页面,它也是最先实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时,php还提供了一个命令行接口,所以,其也能够在大多数系统上做为一个独立的shell来使用。Rasmus Lerdorf于1994年开始开发PHP,它是初是一组被Rasmus Lerdorf称做“Personal Home Page Tool”的Perl脚本,这些脚本能够用于显示做者的简历并记录用户对其网站的访问。后来,Rasmus Lerdorf使用C语言将这些Perl脚本重写为CGI程序,还为其增长了运行Web forms的能力以及与数据库交互的特性,并将其重命名为“Personal Home Page/Forms Interpreter”或“PHP/FI”。此时,PHP/FI已经能够用于开发简单的动态web程序了,这便是PHP 1.0。1995年6月,Rasmus Lerdorf把它的PHP发布于comp.infosystems.www.authoring.cgi Usenet讨论组,今后PHP开始走进人们的视野。1997年,其2.0版本发布。web
1997年,两名以色列程序员Zeev Suraski和Andi Gutmans重写的PHP的分析器(parser)成为PHP发展到3.0的基础,并且今后将PHP重命名为PHP: Hypertext Preprocessor。此后,这两名程序员开始重写整个PHP核心,并独立出来于1999年发布了Zend Engine 1.0,这也意味着PHP 4.0的诞生。2004年7月,Zend Engine 2.0发布,由此也将PHP带入了PHP5时代。PHP5包含了许多重要的新特性,如加强的面向对象编程的支持、支持PDO(PHP Data Objects)扩展机制以及一系列对PHP性能的改进。shell
PHP Zend Engine数据库
Zend Engine是开源的、PHP脚本语言的解释器,它最先是由以色列理工学院(Technion)的学生Andi Gutmans和Zeev Suraski所开发,Zend也正是此二人名字的合称。后来两人联合创立了Zend Technologies公司。apache
Zend Engine 1.0于1999年随PHP 4发布,由C语言开发且通过高度优化,并可以作为PHP的后端模块使用。Zend Engine为PHP提供了内存和资源管理的功能以及其它的一些标准服务,其高性能、可靠性和可扩展性在促进PHP成为一种流行的语言方面发挥了重要做用。编程
Zend Engine的出现将PHP代码的处理过程分红了两个阶段:后端
PHP刚开始用户访问都是直接由解释器解释,加入zend以后就成了用户访问时要先编译在执行二进制格式结果是第一次访问要编译而第二次直接访问二进制速度提高。首先是分析PHP代码并将其转换为称做Zend opcode的二进制格式(相似Java的字节码)并将其存储于内存中;第二阶段是使用Zend Engine去执行这些转换后的Opcode(Opcode只能在Zend引擎当中运行)。api
PHP架构图服务器
SAPI提供了一个和外部通讯的接口,使得PHP能够和其余应用进行交互数据。php默认提供了不少种SAPI,常见的给apache的mod_php5,CGI,给IIS的ISAPI,还有Shell的CLI。对于一个基于apache的php应用,其运行流程能够简单归结以下:
apache -> httpd -> mod_phpfastcgi -> sapi -> php
PHP的Opcode
Opcode是一种PHP脚本编译后的中间语言,就像Java的ByteCode,或者.NET的MSL。当解释器完成对脚本代码的分析后,便将它们生成能够直接运行的中间代码,也称为操做码(Operate Code,opcode)。Opcode cache的目地是避免重复编译,减小CPU和内存开销。若是动态内容的性能瓶颈不在于CPU和内存,而在于I/O操做,好比数据库查询带来的磁盘I/O开销,那么opcode cache的性能提高是很是有限的。可是既然opcode cache能带来CPU和内存开销的下降,这总归是好事。
PHP执行PHP脚本代码通常会通过以下4个步骤(确切的来讲,应该是PHP的语言引擎Zend):
Scanning(Lexing) ——将PHP代码转换为语言片断(Tokens) Parsing ——————将Tokens转换成简单而有意义的表达式 Compilation ———将表达式编译成Opocdes Execution ————顺次执行Opcodes,每次一条,从而实现PHP脚本的功能