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的加密函数有crypt()、 md5() 和sha1() 这3种, 其中crypt() 用于单向加密, 所谓的单向加密就是将需要加密的内容进行加密之后, 无法将密文转换成为可读的内容, 因此单向加密的应用范围较狭窄, 一般用于用户名认证和密码输入等情况; 当用户进入系统时,只需要将密文口令输 入,经过系统验证与存储的口令一致, 即可通过。
md5()和sha1()属于哈希算法,它是不可逆的一种算法,通过截取任意一段的初始信息,将其进行转换,所得到的内容就是哈希值,且长度固定。 这样即使信息丢失, 对哈希值进行分析也是无意义的,因为它与原来的信息并无直接联系, 因此具备较强的加密功能。md5() 使用了MD5散列算法, 将一个长度不固定的信息转换为128位的信息摘要。
sha1() 函数使用了SHA-1的散列算法,其原理与md5() 类似。md5() 和sha1() 经常用于验证信息的完整性, 即通过计算文件的哈希值来验证文件是否被修改,因此在PHP中还需要两个函数来对哈希值进行计算, md5_file() 和sha1_file(), 一旦发现计算出的哈希值与原始值不同,就可以判断文件遭到了修改。这3种函数虽然操作简单,但是都是不可逆的, 无法对密文进行解读;但是在更高层次的加密工作中,这些简单的加密函数的加密效果就显得有些捉襟见肘了。
加密总是与安全密不可分,而每个PHPer都必须将应用安全作为必要的设计思路融入代码中,以下是一些最佳实践的建议。
不要再使用MD5,不要使用sha1,基本上已经没有破解难度了。请使用 password_hash来哈希密码(php 版本大于等于5.5,小于 5.5 请使用 password_compat 库),由于 password_hash函数已帮你处理好了加盐,而且作为盐的随机字串已通过加密算法成为了哈希的一部分,password_verify()函数会自动将盐从哈希中提取出来,所以你无需考虑盐的存储问题。
通信接口的签名,请使用非对称算法对签名秘钥进行加密, 并对密钥设置有效期,定期更换。
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、数组负索引等 |
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脚本 |
|
---|
Serv脚本 | SQL ▪ ASP ▪ ADO ▪ PHP |
---|
.NET | Microsoft.NET ▪ .NET Mobile |
---|
多媒体 |
|
---|
文档呈现语言 |
|
---|
样式格式描述语言 |
|
---|
动态网页技术 |
|
---|
客户端交互技术 |
|
---|
客户端脚本语言 |
|
---|
标识定位语言 |
|
---|
文档纲要语言 |
|
---|