含光混世贵无名,孤高何用比云月
PHP

查询结果如下:

详细条目 英文搜索 <<快速查询:


PHP(Pre Hypertext Preprocessor)即“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。   PHP脚本程序主要应用于Web服务端开发,命令行和编写桌面应用程序。PHP支持和所有web开发语言之间的WDDX复杂数据交换。关于相互连接,PHP 已经支持了对Java对象的即时连接,并且可以透明地将其用作PHP对象。


目录

  1. 1发展历程
  2. 2语言特点
  3. 开源免费
  4. 快捷高效
  5. 拓展性强
  1. 3运行机制
  2. 4参考框架
  3. 5数据安全
  4. 会话安全
  5. 文件系统安全
  1. 数据库安全
  2. 6数据访问
  3. 7网站应用
  4. 8版本记录

>发展历程

PHP原始为Personal Home Page的缩写,已经正式更名为 "PHP: Hypertext Preprocessor"。自20世纪90年代国内互联网开始发展到现在,互联网信息几乎覆盖了我们日常活动所有知识范畴,并逐渐成为我们生活、学习、工作中必不可少的一部分。据统计,从2003 年开始,我国的网页规模基本保持了翻番的增长速度,并且呈上升趋势。PHP 语言作为当今最热门的网站程序开发语言,它具有成本低、速度快、可移植性好、 内置丰富的函数库等优点,因此被越来越多的企业应用于网站开发中。但随着互联网的不断更新换代,PHP语言也出现了不少问题。 
根据动态网站要求,PHP语言作为一种语言程序,其专用性逐渐在应用过程中显现,其技术水平的优劣与否将直接影响网站的运行效率。其特点是具有公开的源代码, 在程序设计上与通用型语言,如C语言相似性较高,因此在操作过程中简单易懂,可操作性强。同时,PHP语言具有较高的数据传送处理水平和输出水平,可以广泛应用在Windows系统及各类Web服务器中。如果数据量较大,PHP语言还可以拓宽链接面,与各种数据库相连,缓解数据存储、检索及维护压力。随着技术的发展,PHP 语言搜索引擎还可以量体裁衣,实行个性化服务,如根据客户的喜好进行分类收集储存,极大提高了数据运行效率。 
对于非常小的项目,PHP是一个十分符合人意的编程语言。 但是对于较大的和更为复杂的项目,PHP 就显出它的薄弱了。所以,针对PHP暴露出的一系列缺点问题,我们应当不断地摸索之后,然后找到某些问题的解决方案。一个开源的语言十分流行是一件好事。希望所有的问题能有一天得到解决,然后我们就将拥有一个开源语言,它既开源,又好用。 

>语言特点

>开源免费

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

>快捷高效

PHP是一种非常容易学习和使用的一门语言,它的语法特点类似于C语言,但又没有C语言复杂的地址操作,而且又加入了面向对象的概念,再加上它具有简洁的语法规则,使得它操作编辑非常简单,实用性很强。 
PHP可以与很多主流的数据库建立起连接,如MySQLODBCOracle等,PHP是利用编译的不同函数与这些数据库建立起连接的,PHPLIB就是常用的为一般事务提供的基库。 
过程和面向对象并用,在PHP语言的使用中,可以分别使用面向过程和面向对象, 而且可以将PHP面向过程和面向对象两者一起混用,这是其它很多编程语言做不到的。 

>拓展性强

PHP是目前最流行的编程语言,这毋庸置疑。它驱动全球超过2亿多个网站,有全球超过81.7%的公共网站在服务器端采用PHP。PHP常用的数据结构都内置了,使用起来方便简单,也一点都不复杂,表达能力相当灵活。 
PHP在不断兼容着类似closures和命名空间等技术,同时兼顾性能和当下流行的框架。版本是7之后,一直在提供更高性能的应用。 
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的加密函数有crypt()、 md5() 和sha1() 这3种, 其中crypt() 用于单向加密, 所谓的单向加密就是将需要加密的内容进行加密之后, 无法将密文转换成为可读的内容, 因此单向加密的应用范围较狭窄, 一般用于用户名认证和密码输入等情况; 当用户进入系统时,只需要将密文口令输 入,经过系统验证与存储的口令一致, 即可通过。 
md5()和sha1()属于哈希算法,它是不可逆的一种算法,通过截取任意一段的初始信息,将其进行转换,所得到的内容就是哈希值,且长度固定。 这样即使信息丢失, 对哈希值进行分析也是无意义的,因为它与原来的信息并无直接联系, 因此具备较强的加密功能。md5() 使用了MD5散列算法, 将一个长度不固定的信息转换为128位的信息摘要。 
sha1() 函数使用了SHA-1的散列算法,其原理与md5() 类似。md5() 和sha1() 经常用于验证信息的完整性, 即通过计算文件的哈希值来验证文件是否被修改,因此在PHP中还需要两个函数来对哈希值进行计算, md5_file() 和sha1_file(), 一旦发现计算出的哈希值与原始值不同,就可以判断文件遭到了修改。这3种函数虽然操作简单,但是都是不可逆的, 无法对密文进行解读;但是在更高层次的加密工作中,这些简单的加密函数的加密效果就显得有些捉襟见肘了。 
不要再使用MD5,不要使用sha1,基本上已经没有破解难度了。请使用 password_hash来哈希密码(php 版本大于等于5.5,小于 5.5 请使用 password_compat 库),由于 password_hash函数已帮你处理好了加盐,而且作为盐的随机字串已通过加密算法成为了哈希的一部分,password_verify()函数会自动将盐从哈希中提取出来,所以你无需考虑盐的存储问题。 
通信接口的签名,请使用非对称算法对签名秘钥进行加密, 并对秘钥设置有效期,定期更换。 

>数据库安全

数据库系统已经成为各个动态网站上 web 应用程序的重要组成部分。由于非常敏感和机密的数据有可能保存在数据库中,所以对数据库实施保护就显得尤为重要了。要从数据库中提取或者存入数据,就必须经过连接数据库、发送一条合法查询、获取结果、关闭连接等步骤。目前,能完成这一系列动作的最常用的查询语言是结构化查询语言 Structured Query Language (SQL)。 

>数据访问

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 语言进行行业网站设计,能够实现数据库的实时性更新,网站的日常维护和管理简单易行,进而提高用户的使用效率。 
PHP语言应用过程中,要求开发人员熟悉该语言,特别是软件版本、特性等诸多环节,否则容易造成冲突,使配置问题难以处理。因此,在网站开发设计过程中,应避免单独进行环境搭配。 

>版本记录

版本
发布日期
最终支持
相关更新及备注
1.0
1995-06-08
--
首次使用
2.0
1996-04-16
--
针对PHP 1.0的改进版,速度更快、体积更小,更容易产生动态网页。
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
2005-07-11
2008-08-08
修复了一些致命错误
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、数组负索引等

简典