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版本发布。
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性能的改进。
PHP Zend Engine
Zend Engine是开源的、PHP脚本措辞的阐明器,它最早是由以色列理工学院(Technion)的学生Andi Gutmans和Zeev Suraski所开拓,Zend也正是此二人名字的合称。后来两人联合创立了Zend Technologies公司。
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引擎当中运行)。
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脚本的功能