PHP(超文本预处理器)简介

爱⌒轻易说出口 提交于 2019-12-26 04:17:54

PHP(超文本预处理器)

PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域。 

中文名:超文本预处理器                     外文名:PHP: Hypertext Preprocessor

编程范型

面向对象、命令式编程

简介

PHP原始为Personal Home Page的缩写,已经正式更名为 "PHP: Hypertext Preprocessor"。自20世纪90年代国内互联网开始发展到现在,互联网信息几乎覆盖了我们日常活动所有知识范畴,并逐渐成为我们生活、学习、工作中必不可少的一部分。据统计,从2003 年开始,我国的网页规模基本保持了翻番的增长速度,并且呈上升趋势。PHP 语言作为当今最热门的网站程序开发语言,它具有成本低、速度快、可移植性好、 内置丰富的函数库等优点,因此被越来越多的企业应用于网站开发中。但随着互联网的不断更新换代,PHP语言也出现了不少问题。

根据动态网站要求,PHP语言作为一种语言程序,其专用性逐渐在应用过程中显现,其技术水平的优劣与否将直接影响网站的运行效率。其特点是具有公开的源代码, 在程序设计上与通用型语言,如C语言相似性较高,因此在操作过程中简单易懂,可操作性强。同时,PHP语言具有较高的数据传送处理水平和输出水平,可以广泛应用在Windows及维护压力。随着技术的发展,PHP 语言搜索引擎还可以量体裁衣,实行个性化服务,如根据客户的喜好进行分类收集储存,极大提高了数据运行效率。

主要特点

(一)开源性和免费性

由于PHP的解释器的源代码是公开的,所以安全系数较高的网站可以自己更改PHP的解释程序。另外,PHP 运行环境的使用也是免费的。

(二)快捷性

PHP是一种非常容易学习和使用的一门语言,它的语法特点类似于C语言,但又没有C语言复杂的地址操作,而且又加入了面向对象的概念,再加上它具有简洁的语法规则,使得它操作编辑非常简单,实用性很强。 

(三)数据库连接的广泛性

PHP可以与很多主流的数据库建立起连接,如Mysql、Oracle等,PHP是利用编译的不同函数与这些数据库建立起连接的,PHPLIB就是常用的为一般事务提供的基库。 

(四)面向过程和面向对象并用

在PHP语言的使用中,可以分别使用面向过程和面向对象, 而且可以将PHP面向过程和面向对象两者一起混用,这是其它很多编程语言是做不到的。

优点

(一)流行,容易上手

PHP是目前最流行的编程语言,这毋庸置疑。它驱动全球超过2亿多个网站,有全球超过81.7%的公共网站在服务器端采用PHP。PHP常用的数据结构都内置了,使用起来方便简单,也一点都不复杂,表达能力相当灵活。 

(二)开发职位很多

在服务器端的网站编程中PHP会更容易帮助你找到工作。很多互联网相关企业都在使用PHP开发框架,所以可以说市场对PHP的开发程序员的需求还是比较大的。 

(三)仍然在不断发展

PHP在不断兼容着类似closures和命名空间等技术,同时兼顾性能和当下流行的框架。版本是7之后,一直在提供更高性能的应用。 

(四)可植入性强

PHP 语言在补丁漏洞升级过程中,核心部分植入简单易行,且速度快。 

(五)拓展性强

PHP 语言在数据库应用过程中,可以从数据库调取各类数据,执行效率高。

缺点

(一)PHP的解释运行机制

在 PHP 中,所有的变量都是页面级的,无论是全局变量, 还是类的静态成员,都会在页面执行完毕后被清空。

(二)设计缺陷,缺少关注PHP被称作是不透明的语言,因为没有堆栈追踪,各种脆弱的输入。没有一个明确的设计哲学。早期的PHP受到Perl的影响,带有out参数的标准库又是有C语言引入,面向对象的部分又是从C++和Java学来的。

(三)对递归的不良支持

PHP并不擅长递归。它能容忍的递归函数的数量限制和其他语言比起来明显少。

主要参考框架

(一)CodeIgniter的优点

1. 配置简单,全部的配置使用 PHP脚本来配置,执行效率高;具有基本的路由功能,能够进行一定程度的路由;具有初步的Layout功能,能够制作一定程度的界面外观;数据库层封装的不错,具有基本的MVC功能。

2. 快速简洁,代码不多,执行性能高,PHP框架简单, 容易上手,学习成本低,文档详细;自带了很多简单好用的library,框架适合小型应用。

(二)CodeIgniter 缺点

1. 把Model层简单的理解为数据库操作。

2. PHP 框架略显简单,只能够满足小型应用,略微不太能够满足中型应用需要。

(三)CakePHP 的优点

1. CakePHP 是最类似于RoR的 PHP 框架,包括设计方式,数据库操作的Active Record方式;设计层面很优雅,没有自带多余的 library,所有的功能都是纯粹的框架,执行效率还不错;数据库层的hasOne,hasMany 功能很强大,对于复杂业务处理比较合适;路由功能,配置功能还不错;自动构建脚手架(scaffold)很强大;适合中型应用;基本实现过了MVC每一层; 具有自动操作命令行脚本功能。

2. 文档比较全,在国内推广的比较成功,大部分人都知道CakePHP,学习成本中等。

(四)CakePHP 的缺点

1. CakePHP非常严重的问题是把Model理解为数据库层操作,严重影响了除了数据库之外的操作能力

2. CakePHP的cache功能略显薄弱,配置功能稍嫌弱;CakePHP不适合大型应用,只适合中型应用,小型应用来说略微的学习成本高了点。

PHP加密

加密的目的

加密不同于密码,加密是一个动作或者过程,其目的就是将一段明文信息(人类或机器可以直接读懂的信息)变为一段看上去没有任何意义的字符,必须通过事先约定的解密规则才能将信息转换回有意义的可读信息,通过加密可以防止非授权的信息窃取。

PHP加密函数

PHP的加密函数有crypt()、 md5() 和sha1() 这3种, 其中crypt() 用于单向加密, 所谓的单向加密就是将需要加密的内容进行加密之后, 无法将密文转换成为可读的内容, 因此单向加密的应用范围较狭窄, 一般用于用户名认证和密码输入等情况; 当用户进入系统时,只需要将密文口令输 入,经过系统验证与存储的口令一致, 即可通过。

md5()和sha1()属于哈希算法,它是不可逆的一种算法,通过截取任意一段的初始信息,将其进行转换,所得到的内容就是哈希值,且长度固定。 这样即使信息丢失, 对哈希值进行分析也是无意义的,因为它与原来的信息并无直接联系, 因此具备较强的加密功能。md5() 使用了MD5散列算法, 将一个长度不固定的信息转换为128位的信息摘要。

sha1() 函数使用了SHA-1的散列算法,其原理与md5() 类似。md5() 和sha1() 经常用于验证信息的完整性, 即通过计算文件的哈希值来验证文件是否被修改,因此在PHP中还需要两个函数来对哈希值进行计算, md5_file() 和sha1_file(), 一旦发现计算出的哈希值与原始值不同,就可以判断文件遭到了修改。这3种函数虽然操作简单,但是都是不可逆的, 无法对密文进行解读;但是在更高层次的加密工作中,这些简单的加密函数的加密效果就显得有些捉襟见肘了。

PHP加密

加密总是与安全密不可分,而每个PHPer都必须将应用安全作为必要的设计思路融入代码中,以下是一些最佳实践的建议。
  不要再使用MD5,不要使用sha1,基本上已经没有破解难度了。请使用 password_hash来哈希密码(php 版本大于等于5.5,小于 5.5 请使用 password_compat 库),由于 password_hash函数已帮你处理好了加盐,而且作为盐的随机字串已通过加密算法成为了哈希的一部分,password_verify()函数会自动将盐从哈希中提取出来,所以你无需考虑盐的存储问题。

通信接口的签名,请使用非对称算法对签名秘钥进行加密, 并对密钥设置有效期,定期更换。 

MySQL数据库访问

PHP作为服务器端的脚本语言,其跨平台性以及丰富的函数库成为网站开发的主流语言,而作为网站必不可少的数据库,轻量、开源、性能优良、简单易用的Mysql得到各个中小型企业的青睐。所以,PHP访问数据库技术就成为网站开发的一项基本且重要的工作。基于不同的环境、不同的工具,可以使用不同的MySQL数据库的访问方法。

1. 面向对象的方法

1.1 mysqli

通过Mysqli构造方法实例化一个MySQL连接对象,相当于建立了一个连接,后续代码完全使用面向对象的方法,使用该对象的成员函数操作MySQL数据库。

1.2 PDO连接MySQL数据库

PDO是基于数据库抽象层的一种访问方法,基于不同的数据库的驱动运行不同的链接库进行数据库访问。同样适用面向对象的方法,创建PDO对象进行连接。

1.3 ADODB连接MySQL数据库

ADODB同样是数据库抽象类。ADODB的数据库提供了共通的应用程序和所有支持的数据库连接,ADODB提供了很 比较实用的方法,使它超越了一个抽象层的功能。

2. 面向过程的方法

面向过程的方法是PHP连接数据库最基本的方法,使用较为简单。其灵活性较差,在大型项目的开发中一般较少使用。 该设计提供了一个面向过程的接口,并且是针对MySQL4.1.3或更早版本设计的 。 因此 ,虽然也可 以与MySQL4.1.3或更新的数据库服务端进行交互,但并不支持后期MySQL服务端提供的一些特性。由于比较古老,安全性差,所以现在被后来的MySQLi取代。

网站应用

今天,网络技术正以突飞猛进的速度发展,而企业也要与时俱进,只有高度重视并充分利用网络技术,才能在实际运行过程中,让网络成为企业发展的助力。PHP语言作为网站开发的通用语言,简单易行,可移植性好,应用空间广泛,逐渐受到网站开发人员的欢迎。因此,在行业网站建设过程中,具有良好的应用前景。 

与其他常用语言相比, PHP语言优势明显。较好的可移植性、可靠性以及较高的运行效率使 PHP 语言在当下行业网站建设中独占鳌头。利用 PHP 语言进行行业网站设计,能够实现数据库的实时性更新,网站的日常维护和管理简单易行,进而提高用户的使用效率。 [2] 

PHP语言应用过程中,要求开发人员熟悉该语言,特别是软件版本、特性等诸多环节,否则容易造成冲突,使配置问题难以处理。因此,在网站开发设计过程中,应避免单独进行环境搭配。

展望

对于非常小的项目,PHP是一个十分符合人意的编程语言。 但是对于较大的和更为复杂的项目,PHP 就显出它的薄弱了。所以,针对PHP暴露出的一系列缺点问题,我们应当不断地摸索之后,然后找到某些问题的解决方案。一个开源的语言十分流行是一件好事。希望所有的问题能有一天得到解决,然后我们就将拥有一个开源语言,它既开源,又好用。

发行历史

版本 发布日期 最终支持 相关更新及备注
1.0 1995-06-08 -- 首次使用
2.0 1997-11-01 -- PHP首个发行版
3.0 1998-06-06 2000-10-20 Zeev Suraski和Andi Gutmans重写了底层
4.0 2000-05-22 2001-06-23 增加了Zend引擎
4.1 2001-12-10 2002-03-12 加入了superglobal(超全局的概念,即$_GET、$_POST等)
4.2 2002-04-22 2002-09-06 默认禁用register_globals
4.3 2002-12-27 2005-03-31 引入了命令行界面CLI用来不用CGI
4.4 2004-07-11 2008-08-07 修复了一些致命错误
5.0 2004-07-13 2005-09-05 ZendⅡ引擎
5.1 2005-11-24 2006-08-24 引入了编译器来提高性能、增加了PDO作为访问数据库的接口
5.2 2006-11-02 2011-01-06 默认启用过滤器扩展
5.3 2009-06-30 2014-08-14 支持命名空间;使用XMLReader和XMLWriter增强XML支持;支持SOAP ,延迟静态绑定,跳转标签(有限的goto), 闭包,Native PHP archives。
5.4 2012-03-01 2015-09-03 支持Trait、简短数组表达式。移除了register_globals, safe_mode, allow_call_time_pass_reference, session_register(), session_unregister(), magic_quotes以及session_is_registered()。加入了内建的Web服务器。增强了性能,减小内存使用量。
5.5 2013-06-20 2016-07-10 支持generators,用于异常处理的finally ,将OpCache(基于 Zend Optimizer+)加入官方发布中。
5.6 2014-08-28 2018-12-31 常数标量表达式、可变参数函数、参数拆包、新的求幂运算符、函数和常量的use语句的扩展、新的phpdbg调试器作为SAPI模块,以及其他更小的改进
6.x 未发布 -- 取消掉的、从未正式发布的PHP版本。
7.0 2015-12-03 2018-12-03 Zend Engine 3 (性能提升并在Windows上支持 64-bit 整数),统一的变量语法, 基于抽象语法树编译过程。
7.1 2016-12-01 2019-12-01 void返回值类型,类常量,可见性修饰符
7.2 2017-11-30 2020-11-30 对象参数和返回类型提示、抽象方法重写等
7.3 2018-12-06 2021-12-06 PCRE2支持等
7.4 2019-11-28 2022-11-28 改进OpenSSL、弱引用等
8.0

2020年 S4

2021年 S1

2023年 S4

2024年 S1

JIT、数组负索引等

WEB技术

HTML XHTML ▪ HTML 5 ▪ CSS ▪ TCP/IP
XML XML ▪ XSL ▪ XSLT ▪ XSL-FO ▪ XPath ▪ XPointer ▪ XLink ▪ DTD ▪ XML Schema ▪ DOM ▪ XForms ▪ SOAP ▪WSDL ▪ RDF ▪ RSS ▪ WAP ▪ Web Services
Web脚本

JavaScript ▪ HTML DOM ▪ DHTML ▪ VBScript ▪ AJAX ▪ jQuery ▪ JSON ▪ E4X ▪ WMLScript

Serv脚本

SQL ▪ ASP ▪ ADO ▪ PHP

.NET

Microsoft.NET ▪ .NET Mobile

多媒体
SMIL ▪ SVG

网页技术与标准

文档呈现语言
▪ HTML ▪ XHTML ▪ XML  
▪ XForms ▪ DHTML    
 
样式格式描述语言
▪ 层叠样式表     ▪ XSL    
 
动态网页技术
▪ CGI     ▪ FastCGI ▪ ASP ▪ ASP.NET
▪ ColdFusion ▪ JSP ▪ PHP  
 
客户端交互技术
▪ ActiveX ▪ Java Applet ▪ JavaFX ▪ AJAX
▪ Silverlight ▪ ActionScript     ▪ Flex ▪ AIR    
 
客户端脚本语言
▪ JavaScript ▪ JScript ▪ VBScript  
▪ ECMAScript
标识定位语言
▪ URL ▪ URI ▪ XPath ▪ URL重写
 
文档纲要语言
 
▪ DTD     ▪ XML Schema
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!