PHP原始为Personal Home Page的缩写,已经正式更名为"PHP: Hypertext Preprocessor"。注意不是“Hypertext Preprocessor”的缩写,这种将名称放到定义中的写法被称作递归缩写。PHP于1994年由Rasmus Lerdorf创建,刚刚开始是Rasmus Lerdorf为了要维护个人网页而制作的一个简单的用Perl语言编写的程序。这些工具程序用来显示Rasmus Lerdorf的个人履历,以及统计网页流量。后来又用C语言重新编写,包括可以访问数据库。他将这些程序和一些表单直译器整合起来,称为PHP/FI。PHP/FI可以和数据库连接,产生简单的动态网页程序。
在1995年以Personal Home Page Tools (PHP Tools)开始对外发表*版本,Lerdorf写了一些介绍此程序的文档。并且发布了PHP1.0!在这的版本中,提供了访客留言本、访客计数器等简单的功能。以后越来越多的网站使用了PHP,并且强烈要求增加一些特性。比如循环语句和数组变量等等;在新的成员加入开发行列之后,Rasmus Lerdorf在1995年6月8日将PHP/FI公开发布,希望可以透过社群来加速程序开发与寻找错误。这个发布的版本命名为PHP 2,已经有PHP的一些雏型,像是类似Perl的变量命名方式、表单处理功能、以及嵌入到HTML中执行的能力。程序语法上也类似Perl,有较多的限制,不过更简单、更有弹性。PHP/FI加入了对MySQL的支持,从此建立了PHP在动态网页开发上的地位。到了1996年底,有15000个网站使用 PHP/FI。
在1997年,任职于Technion IIT公司的两个以色列程序设计师:Zeev Suraski和Andi Gutmans,重写了 PHP 的剖析器,成为PHP 3的基础。而PHP也在这个时候改称为PHP:Hypertext Preprocessor。经过几个月测试,开发团队在1997年11月发布了PHP/FI 2。随后就开始 PHP 3的开放测试,较后在1998年6月正式发布PHP 3。Zeev Suraski和Andi Gutmans在PHP 3发布后开始改写PHP的核心,这个在1999年发布的剖析器称为 Zend Engine,他们也在以色列的Ramat Gan成立了Zend Technologies来管理PHP的开发。
在2000年5月22日,以Zend Engine 1.0为基础的PHP 4正式发布,2004年7月13日则发布了PHP 5,PHP 5则使用了第二代的Zend Engine。PHP包含了许多新特色,像是强化的面向对象功能、引入PDO(PHP Data Objects,一个存取数据库的延伸函数库)、以及许多效能上的增强。PHP 4已经不会继续更新,以鼓励用户转移到PHP5。
2008年PHP 5成为了PHP*有在开发的PHP版本。将来的PHP 5.3将会加入Late static binding和一些其他的功能强化。PHP 6的开发也正在进行中,主要的改进有移除register_globals、magic quotes 和Safe mode的功能。
2013年6月20日,PHP开发团队自豪地宣布推出PHP5.5.0。此版本包含了大量的新功能和bug修复。需要开发者特别注意的一点是不再支持Windows XP和2003系统。
2014年10月16日,PHP开发团队宣布PHP5.6.2可用。四安全相关的错误是固定在这个版本,包括修复cve-2014-3668,cve-2014-3669和cve-2014-3670。所有的PHP5.6鼓励用户升级到这个版本。
php支持八种原始类型。
四种标量类型:
?boolean(布尔型)
?integer(整型)
?float(浮点型,也作“double”)
?string(字符串)
两种复合类型:
array(数组)、object(对象)
较后是两种特殊类型:
resource(资源)、NULL
为了确保代码的易读性,本手册还介绍了一些伪类型:
?mixed
?number
?callback
可能还会读到一些关于“双精度(double)”类型的参考。实际上double和float是相同的,由于一些历史的原因,这两个名称同时存在。
变量的类型通常不是由程序员设定的,确切地说,是由php根据该变量使用的上下文在运行时决定的。
注:如果想查看某个表达式的值和类型,用var_dump()。
注:如果只是想得到一个易读懂的类型的表达方式用于调试,用gettype()。要查看某个类型,不要用gettype(),而用is_type函数。
函数完整参考手册:
序号 | 分类 | 描述 |
---|---|---|
1 | Array 函数 | |
2 | Calendar 函数 | 日历扩展包含了简化不同日历格式间的转换的函数。 |
3 | Date/Time 函数 | Date/Time 函数用于从 PHP 脚本运行的服务器上获取日期和时间并进行格式化。 |
4 | Directory 函数 | Directory 函数用于获得关于目录及其内容的信息。 |
5 | Error/Logging 函数 | Error/Logging 函数用于对错误进行处理和记录。 |
6 | Filesystem 函数 | Filesystem 函数用于访问和操作文件系统。 |
7 | Filter 函数 | PHP 过滤器用于对来自非安全来源的数据(比如用户输入)进行验证和过滤。 |
8 | FTP 函数 | FTP 函数通过文件传输协议 (FTP) 提供对文件服务器的客户端访问。 |
9 | HTTP 函数 | HTTP 函数用于对由 Web 服务器发送到浏览器的信息进行操作。 |
10 | Libxml 函数 | Libxml 函数和常量与 SimpleXML、XSLT 以及 DOM 函数一起使用。 |
11 | Mail 函数 | mail() 函数用于从脚本中直接发送电子邮件。 |
12 | Math 函数 | Math 函数能处理 integer 和 float 范围内的值。 |
13 | 杂项函数 | 我们把不属于其他类别的函数归纳到杂项函数类别。 |
14 | MySQLi 函数 | MySQLi 函数用于访问 MySQL 数据库服务器。 |
15 | SimpleXML 函数 | SimpleXML 扩展提供了一种获取 XML 元素的名称和文本的简单方式。 |
16 | String 函数 | |
17 | XML Parser 函数 | XML Parser 函数允许您创建 XML 解析器,并为 XML 事件定义句柄。 |
18 | Zip File 函数 | Zip File 函数允许您读取压缩文件。 |
PHP版本VC6与VC9、Thread Safe与None-Thread Safe等的区别
PHP的大版本主要分三支:PHP4/PHP5/PHP6
其中,PHP4由于太古老、对QQ支持不力已基本被淘汰,请无视PHP4。
PHP6由于基本没有生产线上的应用,还基本只是一款概念产品,很多功能已在PHP5.3.3上实现,所以也不详述,请无视PHP6。
PHP5的版本主要分四支:PHP5.2之前的版本、PHP5.2.X、PHP5.3和日前发布的PHP5.4。
PHP5.2之前的版本不值得考虑,因为某些功能缺陷或者BUG。PHP5.4还处于Beta试用的版本号,非稳定版本,请无视PHP5.4。
主流PHP程序对PHP5.2.X的兼容性*,而每次版本号的升级带来的都是安全性和稳定性的改善,所以宜挑选*版本。目前PHP5.2系列*是PHP5.2.17。
而如果产品是自己开发自己使用,PHP5.3在某些方面更具优势,在稳定性上更胜一筹,增加了很多PHP5.2所不具有的功能,比如内置php-fpm、更完善的垃圾回收算法、命名空间的引入、sqlite3的支持等等,是部署项目值得考虑的版本,强烈推荐PHP5.3.3。
除了版本号的不同,同一版本号的PHP版本也有区别,并且在选择PHP扩展的时候需要注意。
install版:可执行的MSI格式安装包。
ZIP版:解压即可用。和install版无区别。建议选择ZIP版。
DEBUG版:最终用户无需关心。
如果你在apache1或者apache2下使用PHP,你应该选择VC6的版本
如果你在IIS下使用PHP应该选择VC9的版本,VC6的版本使用visual studio6编译,VC9使用Visual Studio 2008编译,并且改进了性能和稳定性。VC9版本的PHP需要你安装Microsoft 2008 C++ Runtime。不要在apache下使用VC9的版本。
TS指Thread Safety,即线程安全,一般在IIS以ISAPI方式加载的时候选择这个版本。
NTS即None-Thread Safe,一般以fast cgi方式运行的时候选择这个版本,具有更好的性能。
从2000年10月20日发布的*Windows版的PHP3.0.17开始的都是线程安全的版本,这是由于与Linux/Unix系统是采用多进程的工作方式不同的是Windows系统是采用多线程的工作方式。如果在IIS下以CGI方式运行PHP会非常慢,这是由于CGI模式是建立在多进程的基础之上的,而非多线程。一般我们会把PHP配置成以ISAPI的方式来运行,ISAPI是多线程的方式,这样就快多了。但存在一个问题,很多常用的PHP扩展是以Linux/Unix的多进程思想来开发的,这些扩展在ISAPI的方式运行时就会出错搞垮IIS。因此在IIS下CGI模式才是 PHP运行的最安全方式,但CGI模式对于每个HTTP请求都需要重新加载和卸载整个PHP环境,其消耗是巨大的。
为了兼顾IIS下PHP的效率和安全,微软给出了FastCGI的解决方案。FastCGI可以让PHP的进程重复利用而不是每一个新的请求就重开一个进程。同时FastCGI也可以允许几个进程同时执行。这样既解决了CGI进程模式消耗太大的问题,又利用上了CGI进程模式不存在线程安全问题的优势。
因此,如果是使用ISAPI的方式来运行PHP就必须用Thread Safe(线程安全)的版本;而用FastCGI模式运行PHP的话就没有必要用线程安全检查了,用None Thread Safe(NTS,非线程安全)的版本能够更好的提高效率。
一个很简单的办法就是phpinfo();
Thread Safety disabled是NTS,enabled是TS
Configure Command看到VC98字样的是VC6,Compiler标明 MSVC9 (Visual C++ 2008) 的是VC9
在WIN7下:IIS7+NTS+FastCGI+vc9 是*搭档或者apache+fastcgi+nts+vc6。
在WINXP下:Apache+TS+Apache module +vc6最合适的搭档。
PHP3跟Apache服务器的紧密结合的特性;加上它可以不断的更新及加入新的功能,而且几乎支持所有主流与非主流数据库。再以它能高速的执行效率,使得PHP在1999年中的使用站点已经超过了150000。加上它的源代码完全公开,在 Open Source意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新的活力。使得PHP无论在UNIX、LINUX或是Windows的平台上都可以有更多新的功能。它提供丰富的函数,使得在程序设计方面有着更好的支持。
PHP4.0整个脚本程序的核心大幅更动,让程序的执行速度,满足更快的要求。在*化之后的效率,已较传统CGI或者ASP等程序有更好的表现。而且还有更强的新功能、更丰富的函数库。无论您接不接受,PHP都将在 WebCGI的领域上,掀起巅覆性的革命。对于一位专业的Web Master而言,它将也是必修课程之一。
PHP 4.0是更有效的,更可靠的动态Web页开发工具,在大多数情况运行比PHP 3.0要快,其脚本描述更强大并且更复杂,最显著的特征是速率比的增加。PHP4.0这些优异的性能是PHP脚本引擎重新设计产生的结果:引擎由AndiGutmans和Zeev Suraski从底层全面重写。PHP4.0 脚本引擎——Zend引擎,使用了一种更有效的编译——执行方式,而不是PHP 3.0 采用的执行 ——当解析时模型。
PHP4在3.0版的基础上增加或增强了许多有用的特征,主要如下:
(1)别名:在PHP4中,可以利用引用为变量赋值,这给编程带来了很大的灵活性。
(2)扩充了API模块:PHP 4.0 为扩展的 API 模块的提供了扩展PHP接口模块,它比旧的 API 版本显著地快。PHP 模块已有的及最常用的接口多数被转换到使用这个扩展的接口。
(3)自动资源释放:PHP4增加了引用计数功能,这种新技术的引入使PHP4具有了自动内存管理功能,减轻了开发人员的负担。
(4)布尔类型:PHP 4.0 支持布尔类型。
(5)进程生成:在 UNIX 环境下的 PHP 4.0 提供了一个很智能和通用的生成进程,使用了一种名为基于automake/libtool的系统生成技术。
(6)COM/DCOM 支持:PHP 4.0 提供 COM/DCOM 支持 ( 仅用于Windows 环境 ) 可以无缝地存取和访问 COM 对象。
(7)与PHP 3.0 兼容性很好:PHP 4.0 是与 PHP 3.0 代码向后兼容性接近100%。由于 PHP 4 的改进的体系结构,两者有一些细微的差别,但是大多数人将可能永远不可能遇上这种情况。
(8)配置:PHP4重新设计和增强了PHP.ini文件,这使得用PHP.ini来配置PHP显得极为容易,这个文件可以在运行时被Apache(unix系统)或由Windows 注册(Windows 环境)。
(9)加密支持:PHP4实现了完整的加密,这些加密功能是一个完整的mycrypt库,并且 PHP 4.0 支持哈希函数。Blowfish,TripleDES,MD5,并且SHA1 也是可使用的一些加密算法。
(10)类型检查:PHP 4.0 支持同一操作符用于评类型检查:===(3 等号运算符,恒等计算符),为在两个值和其类型之间作检查。例如,'3' ===3 将视为假 ( 类型是不同的),而 3 ==3 ( 相等判断,不比较类型 ) 将视为真。
(11)FTP 支持:PHP 4.0 支持 FTP。通常,你会为通过一个调制解调器连接下载一个大文件提供一个接口。然而,如果你确实有需要,可以使用PHP。
(12)PHP4新增函数或功能增强函数:PHP 4.0 新增了许多函数,同时也将许多现有的函数功能进行了增强,以下是一些例子。array_count_values() eval() foreach() include() ob_end_clean() ob_end_flush() ob_get_contents() ob_start()strip_tags() unset()。
(13)here打印:PHP 4.0 的Here打印是与Perl类似的,尽管完全不相同。Here是打印大容量文章的一个有用的方法,例如在HTML文件中,不会漏掉任何一个字符,例如目录标记。
(14)HTTP Session fallback 系统:为 HTTP Session管理的一个 fallback 系统在 PHP 4.0被实现。缺省情况下,Session标识符由cookies存储。如果没有cookies支持或一项cookies任务失败,Session标识符自动被创建并在 URL 的查询字符串中被携带。
(15)ISAPI 支持:PHP 4.0 能作为一个个性化的 ISAPI 模块作为IIS插件。这比 PHP 3.0 更有效,它作为一个外部的程序来运行。
(16)内存:PHP 4.0 能更有效的使用内存,导致较少的内存占用消耗,这主要归功于引用计数技术的实现。⒄其他类成员函数:在 PHP 4.0 你能在成员函数本身的作用域或全局范围内调用其他类的成员函数。例如,你能用一个子函数覆盖父函数,并在子函数中调用父函数。
(17)多维数组:在 PHP 4.0 ,利用GET,POST,Cookies的进行的数据传输支持多维数组。
(18)个性化的 HTTPSession支持:HTTP Session处理,包括 fallback系统管理,在 PHP 4.0被它的新库函数实现。在版本 3.0 中处理Session要求使用 PHPLIB 和第三方的库函数,它比把Session直接地由 PHP 支持慢了许多。
(19)个性化的 Java 支持:PHP 4.0 支持和java的交互。这种个性化的Java 支持为PHP 在 Java 对象上创建和使用方法提供一个简单并且有效的工具。
(20)对象和数嵌套组:PHP 4.0 实现了功能更加强大的对象,移去了 PHP 3.0存在的种种句法限制。对象能在数组以内被嵌套并且反过来也如此,可以根据你的需要实现嵌套。
(21)面向对象的编程:PHP 4.0 为面向对象的编程和构造类及对象提供扩展的功能和新特征。PHP4实现了对象重载,引用技术等新技术。
(22)对象重载支持:对象重载语法允许第三方的基于面向对象的类库使用 PHP4 的面向对象的特征存取他们自身的功能。使用这个特征的一个 COM 模块已经被实现了。
(23)输出缓冲支持:PHP 提供了一个输出缓冲函数集合。输出缓冲支持允许你写包裹函数功能压缩缓冲区。在 PHP4 的输出缓冲支持允许 HTML 头信息存放,无论 HTML的正文是否输出。头信息( (header(),content type,and cookies ) 不采用缓冲。
(24)增加了PCRE库:PHP 4.0 包括一个 Perl 兼容的正则表达式(PCRE ) 库,和正常regex库一起与 PHP 绑定。split 和replace PCRE 功能被支持。PCRE 和 Perl 正规表达式之间有一些细微差别。
(25)PHP.ini 文件:PHP.ini文件在 PHP4.0 被重新设计,使用的 PHP 的配置PHP.ini是更容易并且更有效的。全部文件能被Apache 在运行时间操作 ( 在 Apache环境 下 ) 或由 Windows 注册表 ( 在 Windows 下面 )。被加入PHP.ini文件的配置指令自动地在所有相关的模块中被支持。
(26)引用计数:PHP 4.0 为系统中的每个数值提供了引用计数,包括资源。一旦一个资源不再被任何变量引用,它自动地被释放以节省内存资源。利用这个特征的最明显的例子一个内置SQL查询的循环语句。在PHP 3.0中 ,每次递归另外的 SQL 结果集合重复申请内存,直到脚本执行完毕,这些结果集合占用的内存才被释放。
(27)支持引用:通过引用可以改变一个变量的值。
(28)函数的运行时绑定:PHP 4.0 的运行时间绑定功能允许你在他们被声明以前调用,无论声明是否在代码以后或是在运行时间。
(29)类的运行时信息:PHP 4.0 支持在运行时刻存取下列类信息:一个对象的类名,一个对象的父类的类名字,以及对象函数所在的名字。
(30)服务器抽象层:为支持Web服务器提供了增强型 SAPI ( 服务器 API ) 接口,是 PHP 4.0 不可分的一部分。这个服务器抽象层,提供了通用的WEB服务器接口支持,支持多线程WEB服务器,为大多数的WEB服务器提供透明的支持,这些服务器包括 Apache,IIS ( ISAPI ),以及 AOL 服务器。
(31)语法的点亮显示:PHP 4.0 语法的点亮显示允许开发者看见源代码而不是脚本,这个功能比PHP 3.0中的更有效。它跑得更快,更执行得更好,并且产生更紧凑的HTML代码。
(32)由引用改变变量的值:PHP 4.0 由引用支持可变的赋值,“关联”的2个变量之中个的任何一个的值被改变,另外的变量的值同样被改变,这类似与C中的指针类型。
(33)在引用字符串中的变量引用:PHP 4.0 增强了在引用字符串中的变量引用。
PHP5在长时间的开发及多个预发布版本后,2004年7月13日,PHP5.0发布。该版本以Zend引擎Ⅱ为引擎,并且加入了新功能如PHP Data Objects(PDO)。PHP5.0版本强化更多的功能。首先,完全实现面向对象,提供名为PHP兼容模式的功能。其次是XML功能,PHP5.0版本支持可直观地访问XML数据、名为SimpleXML的XML处理用界面。同时还强化了XMLWeb服务支持,而且标准支持SOAP扩展模块。数据库方面,PHP新版本提供旨在访问MySQL的新界面——MySQL。除此前的界面外,还可以使用面向对象界面和预处理语句(Prepared Statement)等MySQL的新功能.另外,PHP5.0上还捆绑有小容量RDBMS-SQLite.
*构造函数和析构函数 * 对象的引用 * 对象的克隆 * 对象中的私有、公共及受保护模式 * 接口 (Interfaces)
* 抽象类 * __call * __set 和 __get * 静态成员
构造函数和析构函数
在 PHP4 中,当函数与对象同名时,这个函数将成为该对象的构造函数,并且在 PHP4 中没有析构函数的概念。
在 PHP5 中,构造函数被统一命名为 __construct,并且引入了析构函数的概念,被统一命名为 __destruct。
在PHP4中,传递变量给一个函数或方法,实际是把这个变量做了一次复制,也就意味着你传给函数或方法的是这个变量的一个副本,除非你使用了引用符号“&;” 来声明是要做一个引用,而不是一个 Copy。在 PHP5中,对象总是以引用的形式存在的,对象中的赋值操作同样也都是一个引用操作。
当一个对象始终以引用的形式来被调用时,如果我想得到该对象的一个副本,该怎么办呢?PHP5 提供了一个新的功能,就是对象的克隆,语法为 __clone。
抽象类不能被实例化。
抽象类与其它类一样,允许定义变量及方法。
抽象类同样可以定义一个抽象的方法,抽象类的方法不会被执行,不过将有可能会在其派生类中执行。
__call
PHP5 的对象新增了一个专用方法 __call(),这个方法用来监视一个对象中的其它方法。如果你试着调用一个对象中不存在的方法,__call 方法将会被自动调用。
__set 和 __get
这是一个很棒的方法,__set 和 __get 方法可以用来捕获一个对象中不存在的变量和方法。
在 PHP5 中,你可以在对象的方法中指明其参数必须为另一个对象的实例。
静态成员和静态方法在面象对象编程的术语中被称作 “类方法(class methods)” 和 “类变量(class variables)”。
“类方法” 在一个对象没有实例化前允许被调用。同样,“类变量” 在一个对象没有实例化前可以被独立操作控制(不需要用一个对象的方法来控制)。
异常处理是公认的处理程序错误的理想方法,在 Java及 C 中都有这个概念,我们欣喜的看到,在 PHP5 已经加入了这方面的应用。你可以尝试使用 “try” 和 “catch” 来控制程序的错误。当有错误发生的时候,代码会把错误交给 “catch” 子句来处理,在 “catch” 子句中,你需要指明要把错误交给某个对象处理,这样做可以使代码结构看起来更清晰,因为我们可以把所有的错误信息交给一个对象来处理。
自定义错误处理
你可以很方便的用自定义的处理错误的代码来控制你的程序中的意外。你仅仅需要从异常类中派生出一个自己的错误控制类,在你自己的错误控制类中,你需要有一个构造函数和一个 getMessage 方法。
命名空间
名称空间对类的分组或函数分组很有用。它可以把一些相关的类或函数给组合到一起,方便以后调用。
注意你需要在何种情况下使用名称空间,在实际运用中,你可能会需要声明两个或多个名称一样的对象来做不同的事情,那么你就可以把他们分别放到不同的名称空间中去(但接口是要相同的)。
从PHP5.3开始支持ZendGuard加密方式,必须安装Zend Guard Loader,老的zend optimizer将不被支持。
Linux安装Zend Guard Loader支持的过程:
操作系统为CentOS5.5,PHP版本为5.3.8(CentOS5.5中的PHP默认版本较低,如果要升级到PHP*版,可以使用remi的report源进行升级)。
Windows 下面的 Zend Guard Loader 不支持php5.3.8 VC9 x86 Thread Safe而,php5.3.8 VC9 x86 Non Thread Safe 又不支持 apache。所以安装的话,就需要安装在iis或者和nginx搭配。
1、下载*Linux操作系统系下的Zend Guard Loader。
2、上传至Linux服务器并解压缩,注意阅读生成目录下的README文件。全文如下(添加必要的注释)。在/etc/php.d/目录下创建文件zend.ini,内容如下:
1 | zend_extension=/usr/lib64/php/modules/ZendGuardLoader.so |
注意路径一定要写上,刚开始没写路径,老是加载不上ZendGuardLoader.so,也可以直接将上面的配置写入/etc/php.ini文件中,效果一样。
3、重启httpd服务:service httpd restart。
4.输出<?php phpinfo(); ?>
PHP 5.5 正式版发布 不再支持 Windows XP
同时 PHP 开发者也提醒用户,PHP 5.5 也包含一些不向后兼容的内容,包括:不再支持 Windows XP 和 2003 系统;不区分大小写的匹配函数、类;常数名称跟 Locale 无关,这对一些使用非 ASCII 代码的常量名的开发者需要注意的。
1、支持Unicode。Unicode是有其必然,虽然Unicode占用较多的空间,但Unicode带来的便利性,远超过占用空间的缺点,尤其在国际化的今天,硬件设备越来越强大,网速也大幅度的提升,这么一点小小的缺点是可以忽略的。另外一点,PHP也可以在.ini文件中设定能不能开启支持Unicode,决定权在你自己,这是一个不错的点子,关掉Unicode的支持,PHP的性能并不会有大幅度的提升,主要的影响在于需要引用字符串的函数。
2、Register Globals 将被移除这是一个主要的决定,老的PHP使用者会觉得Register Globals满方便的,但是却忽略了Register Globals会带来程序上安全性的隐患,大多数的主机上此项功能是关闭的,印象中从PHP4.3.x版开始,此项默认配置值即是关闭状态,PHP6正式移除Register Globals也代表着如果程序是PHP3时代的产物,将完全不能运用,除了改写用途外,别无他法。
3、Magic Quotes 将取消Magic Quotes主要是自动转义须要转义的字符,此项功能移除也符合大多数PHP开发者的心声。
4、Safe Mode 取消。老实说,这个模式不知道哪里不好,取消就取消吧,反正也用不到。
5、‘var’别名为‘public’,在类中的var声明变成public的别名,相信是为了兼容PHP5而作的决定,PHP6现在也可以称作为OO语言了。
6、通过引用返回将出错未来通过引用返回编译器将会报错 例如$a =& new b()、function &c(),OO语言默认就是引用,所以不须要再运用&了。
7、zend.ze1 compatbility mode 将被移去(Zend.ze1相容模式将被移去),PHP5是为兼容旧有PHP4,所以在.ini中可选择是否开启相容模式,原由在于PHP5运用的是第二代分析引擎,但是相容模式并不是百分之百能分析 PHP4语法,所以旧时代的产物,移除。
8、Freetype 1andGD 1 support将不见这两个Libs存在了很久,php6将不再支持,况且GD1早已被现在的GD2取代了。
9、dl() 被移到SAPI中dl()主要是让设计师加载extension Libs,被移到SAPI中。
10、Register Long Array去除 从PHP5起默认是关闭,在PHP6中正式移除。
11、一些Extension的变更例如XMLReader和XMLWriter将不再是以Extension的方式出现,他们将被移入到PHP的核心之中,并且默认是开启,eregextension将被放入PECL,代表着它将被移出PHP核心,这也是为了让路给新的正则表达式extension,此外,Fileinfo extension也将被导入PHP的核心之中。
12、APC将被导入核心这是一个提高PHP性能的功能,它将被放入PHP核心中,并且可以选择是否启用APC。
13、告别ASP风格的起始标签原来是为了取悦ASP开发者转向运用PHP,现今已经不再须要这种做法了。
较后,别期望PHP6的性能可以彻底超过PHP5,有可能PHP6的执行效率会比PHP5还要来得慢,但是可以预期的是,PHP开发小组将会努力的完善PHP6,超越PHP5。
软件需求(*版)
WindowsVista或更高版本;
Apache2+或IIS6+或Nginx
将PHP4.0.5解压到C:\Web\php\目录下。
将MySQL3.23.38安装到C:\Web\mysql\目录下。
将C:\web\php\php4ts.dll文件拷贝到C:\WINNT\system32\目录下。
将C:\web\php\php.exel文件拷贝到C:\WINNT\目录下。
将C:\web\php\php.ini-dist文件拷贝到C:\WINNT\目录下,并将php.ini-dist更名为php.ini。
运行C:\Web\apache\Apache\Apache.exe-i-n
运行C:\Web\mysql\bin\mysqld-nt.exe--install
编辑C:\WINNT\php.ini
找到“extension_dir=./”字段,将其改为extension_dir="C:\myphp\php\extensions"。
编辑C:\Web\apache\Apache\conf\httpd.conf
找到“#BindAddress*”字段,将其改为BindAddress127.0.0.1。(如果主机有固定IP地址,此处改为主机IP地址。如BindAddress211.101.152.106),找到“ServerName”字段,将其改为ServerNamelocalhost。(如主机有固定主机名,此处改为主机的主机名。如ServerNamebn001)。
找到“ScriptAlias/cgi-bin/"C:/Web/apache/Apache/cgi-bin/"”字段,在其下面加入ScriptAlias/php/"C:/Web/php/"。找到“#AndforPHP4.x,use:”字段,在其后面加入:AddTypeapplication/x-httpd-php;ActionApplication/x-httpd-php"c:/Web/php/php.exe"。
找到“#LoadModuleusertrack_modulemodules/mod_usertrackso”字段,LoadModulephp4_modulec:/web/php/sapi/php4apache.dll
所需软件
php-3.0.14-win32.zip;php-3.0.14-win32.zip;mysql-shareware-3.22.32-win.zip
所有软件均安装在/export/home/guoj/下,也可在其他目录。
安装mysql
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | gzip-dcmysql-3.22.30.tar.gz|tarxvf- cdmysql-3.22.30 ./configure-prefix=/export/home/guoj/mysql make makeinstall scripts/mysql_install_db cd../mysql/bin bin/safe_mysqld&安装phpapache gzip-dcapache_1.3.11.tar.gz|tarxvf- gzip-dcphp-3.0.11.tar.gz|tarxvf- cdapache_1.3.11 ./configure-prefix=/export/home/guoj/www cd../php-3.0.11 ./configure-with-apache=/export/home/guoj/apache_1.3.11 -with-mysql=/export/home/guoj/mysql-enable-track-vars make makeinstall cd../apache_1.3.11 ./configure--prefix=/export/home/guoj/www --activate-module=src/modules/php3/libphp3.aP make makeinstall cd../php-3.0.11 cd../php3.ini-distphp3.ini viphp3.ini修改php3.ini doc_root=/export/home/guoj/www/htdocs/ extension_dir=/export/home/guoj/php-3.0.11/ extension=php3_mysql.dllcpphp3.ini/usr/local/lib/php3.inivi../www/conf/httpd.conf |
加上以下几句:
1 2 3 4 | <Directory"/export/home/guoj/php-3.0.11/"> OptionsFollowSymLinks AllowOverrideNone </Directory>../www/bin/apachectlstart |
PHP 在数据库方面的丰富支持,也是它迅速走红的原因之一,它支持下列的数据库或是数据文件:
Adabas 、D、 DBA、dBase 、dbm 、filePro 、Informix 、InterBase、mSQL 、Microsoft SQL Server、·MySQL、Solid、Sybase、 Oracle 、PostgreSQL
而在 Internet 上它也支持了相当多的通讯协议 (protocol),包括了与电子邮件相关的 IMAP,POP3;网管系统 SNMP;网络新闻NNTP;帐号共用 NIS;全球信息网 HTTP 及 Apache 服务器;目录协议 LDAP 以及其它网络的相关函数。
除此之外,用 PHP 写出来的 Web 后端 CGI 程序,可以很轻易的移植到不同的操作系统上。例如,先以 Linux 架的网站,在系统负荷过高时,可以快速地将整个系统移到 SUN 工作站上,不用重新编译 CGI 程序。面对快速发展的 Internet,这是长期规划的*选择。
语法(例子中均忽略了PHP代码边界符 ):
注释的语法有三种:
基本的结构控制语句:
一个PHP实例:
php对面向对象的支持
面向对象编程的概念:
不同的作者之间说法可能不一样,但是一个OOP语言必须有以下几方面:
1.抽象数据类型和信息封装
2.继承
3.多态
在PHP中是通过类来完成封装的:
当然你可以按自己的喜好进行定义,但*保持一种标准,这样会更有效。数据成员在类中使用"var"声明来定义,在给数据成员赋值之前,它们是没有类型的。一个数据成员可以是一个整数,一个数组,一个相关数组(associative array)或者是一个对象。方法在类中被定义成函数形式,在方法中访问类成员变量时,你应该使用$this->name,否则对一个方法来说,它只能是局部变量。
使用new操作符来创建一个对象:
然后你可以使用成员函数通过:
在这个例子中,setX成员函数将5赋值给对象的成员变量x(不是类的),然后getX返回它的值5。可以象:$obj->x=6那样通过类引用方式来存取数据成员,这不是一个很好的OOP习惯。我强烈建议通过方法来存取成员变量。如果你把成员变量看成是不可处理的,并且只通过对象句柄来使用方法,你将是一个好的OOP程序员。不幸的是,PHP不支持声明私有成员变量,所以不良代码在PHP中也是允许的。继承在PHP中很容易实现,只要使用extends关键字。
"Another"类的对象拥有了父类(Something)的全部的数据成员及方法,而且还加上了自己的数据成员和方法。
你可以使用
PHP只支持单继承,所以你不能从两个或两个以上类派生出新的类来。你可以在派生类中重定义一个方法,如果我们在"Another"类中重定义了getX方法(方法重写),我们就不能使 用"Something"中的getX方法了。如果你在派生类中声明了一个与基派同名的数据成员,那么当你处理它时, 它将“隐藏”基类的数据成员。
你可以在你的类中定义构造函数。构造函数是一个与类名同名的方法,当你创建一个类的对象时会被调用,例如:
所以你可以创建一个对象,通过:
构造函数会自动地把6赋值给数据变量x。构造函数和方法都是普通的PHP函数(”__“两个下划线,魔术方法),所以你可以使用缺省参数。
接着:
缺省参数使用C++的方式,所以你不能忽略Y的值,而给X一个缺省参数,参数是从左到右赋值的,如果传入的参数少于要求的参数时,其作的将使用缺省参数。
当一个派生类的对象被创建时,只有它的构造函数被调用,父类的构造函数没被调用,如果你想调用基类的构造函数,你必须要在派生类的构造函数中用parent::__construct()调用。可以这样做是在派生类中所有父类的方法都是可用的。
OOP的一个很好的机制是使用抽象类。抽象类是不能实例化,只能提供给派生类一个接口。设计者通常使用抽象类来强迫程序员从基类派生,这样可以确保新的类包含一些期待的功能。在PHP中没有标准的方法,但是:如果你需要这个特性,可以通过定义基类,并在它的构造函数后加上"die" 的调用,这样就可以保证基类是不可实例化的,在每一个方法(接口)后面加上"die" 语句,所以,如果一个程序员在派生类中没有复盖方法,将引发一个错误。而且因为PHP 是无类型的,你可能需要确认一个对象是来自于你的基类的派生类,那么在基类中增加一个方法来实义类的身份(返回某种标识id),并且在你接收到一个对象参数时校验这个值。当然,如果一个不好的邪恶程序员在派生类中复盖了这个方法,这种方法就不起作用了,不过一般问题多在懒惰的程序员身上,而不是邪恶的程序员。
当然,能够让基类对程序员无法看到是很好的,只要将接口打印出来做他们的工作就可以了。PHP 5 引入了析构函数的概念,这类似于其它面向对象的语言,如 C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
重载(与复盖不同)在PHP中不支持,因为PHP是弱类型语言。在OOP中,你可以重载一个方法来实现两个或重多的方法具有相同的名字,但是有不同数量或类型的参数(这要看语言)。PHP 是一种松散类型的语言,所以通过类型重载不起作用,然而通过参数的个数不同来重载也不起作用。
有时在OOP中重载构造函数非常好,这样你可以通过不同的方法创建对象(变量函数)。在PHP中实现它的技巧是:
通过在类中的额外的处理,使用这个类对用户是透明的:
有时这个非常好用。
多态是对象的一种能力,它可以在运行时刻根据传递的对象参数,决定调用哪一个对象的方法。例如,如果你有一个figure的类,它定义了一个draw的方法。并且派生了circle和rectangle 类,在派生类中你复盖了draw方法,你可能还有一个函数,它希望使用一个参数x,并且可以调用$x->draw()。如果你有多态性,调用哪个draw方法就依赖于你传递给这个函数的对象类型。
多态性在象PHP这样的解释语言(想象一下一个C++编译器生成这样的代码,你应该调用哪一个方法?你也不知道你拥有的对象是什么类型的,好,这不是重点)是非常容易和自然的。所以PHP当然支持多态性。
一些"纯化论者(purists)"可能会说PHP不是一个真正的面向对象的语言,这是事实。PHP 是一个混合型语言,你可以使用OOP,也可以使用传统的过程化编程。然而,对于大型项目,你可能想/需要在PHP 中使用纯的OOP去声明类,而且在你的项目只用对象和类。
随着项目越来越大,使用OOP可能会有帮助,OOP代码很容易维护,容易理解和重用。这些就是软件工程的基础。在基于web的项目中应用这些概念就成为将来网站成功的关键。
在看过基本的OOP概念后,我就可以向你展示更高级的技术:
序列化(Serializing)
PHP不支持永久对象,在OOP中永久对象是可以在多个应用的引用中保持状态和功能的对象,这意味着拥有将对象保存到一个文件或数据库中的能力,而且可以在以后装入对象。这就是所谓的序列化机制。PHP 拥有序列化方法,它可以通过对象进行调用,序列化方法可以返回对象的字符串表示。然而,序列化只保存了对象的成员数据而不包括方法。
在PHP4中,如果你将对象序列化到字符串$s中,然后释放对象,接着反序列化对象到$obj,你可以继续使用对象的方法!我不建议这样去做,因为(a)文档中没有保证这种行为在以后的版本中仍然可以使用。(b) 这个可能导致一种误解,在你把一个序列化后的版本保存到磁盘并退出脚本时。当以后运行这个脚本时,你不能期待着在反序列化一个对象时,对象的方法也会在那里,因为字符串表示根本就不包括方法。
总而言之,PHP 进行序列化对于保存对象的成员变量非常有用。(你也可以将相关数组和数组序列化到一个文件中)。
例子 :
你恢复了成员数据,但是不包括方法(根据文档所说)。这导致了只能通过类似于使用$obj2->x来存取成员变量(你没有别的方法!)的*办法,所以不要在家里试它。
有一些办法可以解决这个问题,我把它留着,因为对这篇简洁的文章来说,他们太不好。我会很高兴地欢迎在PHP的后续版本中有全序列化的特性。
使用类进行数据存储PHP和OOP一件非常好的事情就是,你可以很容易地定义一个类来操作某件事情,并且无论何时你想用的时候都可以调用相应的类。假设你有一个HTML表单,用户可以通过选择产品ID号来选择一个产品。在数据库中有产品的信息,你想把产品显示出来,显示它的价格等等。你拥有不同类型的产品,并且同一个动作可能对不同的产品具有不同的意思。例如,显示一个声音可能意味着播放它,但是对于其它种类的产品可能意味着显示一个存在数据库中的图片。你可以使用OOP或PHP来减少编码并提高质量:
定义一个产品的类,定义它应该有的方法(例如:显示),然后定义对每一种类型的产品的类,从产品类派后出来(SoundItem类,ViewableItem类,等等),复盖在产品类中的方法,使它们按你的想法动作。
根据数据库中每一种产品的类型(type)字段给类命名,一个典型的产品表可能有(id,type,price,description,等等字段)...然后在处理脚本中,你可以从数据库中取出type值,然后实例化一个名为type的对象:
这是PHP的一个非常好的特性,你可以不用考虑对象的类型,调用$obj的显示方法或其它的方法。使用这个技术,你不需要修改脚本去增加一个新类型的对象,只是增加一个处理它的类。
这个功能很强大,只要定义方法,而不去考虑所有对象的类型,在不同的类中按不同的方法实现它们,然后在主脚本中对任意对象使用它们,没有if...else,也不需要两个程序员,只有高兴。
你同意编程是容易的,维护是便宜的,可重用是真的吗?
如果你管理一组程序员,分配工作就是很简单的了,每个人可能负责一个类型的对象和处理它的类。
可以通过这个技术实现国际化,根据用户所选的语言字段应用相应的类就可以了,等等。
当你创建一个$obj的对象时,你可以通过$obj2=$obj来拷贝对象,新的对象是$obj的一个拷贝(不是一个引用),所以它具有$obj在当时的状态。有时候,你不想这样,你只是想生成一个象obj类一样的一个新的对象,可以通过使用new语句来调用类的构造函数。在PHP中也可以通过序列化,和一个基类来实现,但所有的其它类都要从基类派生出来。
进入危险区域
当你序列化一个对象,你会得到某种格式的字符串,如果你感兴趣,你可以调究它,其中,字符串中有类的名字(太好了!),你可以把它取出来,象:
所以假设你创建了一个"Universe"的类,并且强制所有的类都必须从universe扩展,你可以在universe 中定义一个clone的方法,如下:
你所得到的是一个新的Something类的对象,它同使用new方法,调用构造函数创建出的对象一样。我不知道这个对你是否有用,但是Universe类可以知道派生类的名字是一个好的经验。想象是*限制。
模板引擎
Smarty:Smarty的特点是将模板编译成PHP脚本,然后执行这些脚本。很快,非常方便。
Heyes Template Class:一个非常容易使用,但功能强大并且快速的模板引擎,它帮助你把页面布局和设计从代码中分离。
FastTemplate:一个简单的变量插值模板类,它分析你的模板,把变量的值从HTML代码中分离处理。
ShellPage:一个简单易用的类,可以让你的整个网站布局基于模板文件,修改模板就能改变整个站点。
STP Simple Template Parser:一个简单、轻量级并且易于使用的模板分析类。它可以从多个模板中组装一个页面,把结果页面输出到浏览器或者文件系统。
OO Template Class:一个你可以用在自己程序中的面向对象的模板类。
SimpleTemplate:一个可以创建和结构化网站的模板引擎。它可以解析和编译模板。
bTemplate:短小但是快速的模板类,允许你把PHP逻辑代码从HTML修饰代码中分离。
Savant:一个强大且轻量级的PEAR兼容模板系统。它是非编译型的,使用PHP语言本身做为它的模板语言。
ETS - easy template system:可以使用完全相同数据重组模板的模板系统。
EasyTemplatePHP:适用于你的站点的一个简单但是强大的模板系统。
vlibTemplate:一个快速、全能的模板系统,它包含一个缓存和调试类。
AvanTemplate:多字节安全的模板引擎,占用很少系统资源。它支持变量替换,内容块可以设置显示或隐藏
Grafx Software’s Fast Template:一个修改版本的Fast Template系统,它包括缓存功能,调试控制台以及沉默去除为赋值块。
TemplatePower:一个快速、简单、功能强大的模板类。主要功能有嵌套的动态块支持,块/文件包含支持以及显示/隐藏未赋值的变量。
TagTemplate:这个库的功能被设计来使用模板文件,同时允许你从HTML文件检索信息。
htmltmpl: templating engine:一个适用于Python和PHP的模板引擎。它面向希望在项目中分离代码和设计的web应用开发人员。
PHP Class for Parsing Dreamweaver templates:一个分析Dreamweaver模板的简单类,被用于Gallery 2 和WordPress的自定义模块中。
MiniTemplator (Template Engine):针对HTML文件的一个紧凑型模板引擎。对于模板变量和块定义它具有简单的语法。其中块可以嵌套。
Layout Solution:简化网站开发和维护。它拥有常用的变量和页面元素使你不需要重复做页面布局工作。
Cached Fast Template:它已经纳入 FastTemplate ,允许你缓存模板文件,甚至可以在分离的块内容上缓存不同的规格。
TinyButStrong:一个支持MySQL,Odbc,Sql-Server和ADODB的模板引擎。它包含7个方法和两个属性。
Brian Lozier’s php based template engine:只有2K大小,非常快并且是面向对象设计。
WACT:一个从设计中分离代码的模板引擎。
PHPTAL:一个PHP下面的XML/XHTML模板库。
Rong_View_Wudimei:Wudimei开发的国产框架Rong Framework的模板引擎,它类似于smarty,优点是速度快,缺点是模板标签较少,不过够用了。
框架介绍thinkphp
ThinkPHP是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和*影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。
PHP认证级别
PHP课程由初级(IFE)、中级(IPE)和高级(IAE)三个部分。
IFE即Index Front-end Engineer的缩写,指数前端工程师的意思。
IPE即 Index PHP Engineer 的缩写,意思是指数PHP工程师。
IAE即 Index architecture/advanced engineer 的缩写,意思是:指数高级/架构工程师。
PHP安全
PHP其实不过是Web服务器的一个模块功能,所以首先要保证Web服务器的安全。当然Web服务器要安全又必须是先保证系统安全,这样就扯远了,无穷无尽。常见的web安全漏洞有:注入攻击,跨站攻击,服务器自身漏洞等,对应的详细解释,详见:扩展阅读中的《WEB安全性-2010_OWASP_TOP10》,这里有很详尽的解释。
PHP的优点学习过程和方法
PHP的语法类似于C,Perl,ASP或者JSP。对于那些对上述之一的语言较熟悉的人来说,PHP太简单了。相反的,如果你对PHP了解较多,那么你对于其他几种语言的学习都很简单了。你只需要很短的时间内将PHP的核心语言特点全部掌握,你可能已经非常了解HTML,甚至你已经知道怎样用编辑设计软件或者手工来制作好看的WEB站点。由于PHP代码能够无障碍的添加进你的站点,在你设计和维护站点的同时,你可以很轻松的加入PHP使得你的站点更加具有动态特性。
数据库连接
PHP可以编译成具有与许多数据库相连接的函数。PHP与MySQL是绝佳的组合,如果再加上Apache服务器,就是相当完美的了。你还可以自己编写外围的函数取间接存取数据库。通过这样的途径当你更换使用的数据库时,可以轻松的更改编码以适应这样的变化。PHPLIB就是最常用的可以提供一般事务需要的一系列基库。
可扩展性
就像前面说的那样,PHP已经进入了一个高速发展的时期。对于一个非程序员来说为PHP扩展附加功能可能会比较难,但是对于一个PHP程序员来说并不困难。
PHP可伸缩性
传统上网页的交互作用是通过CGI来实现的。CGI程序的伸缩性不很理想,因为它为每一个正在运行的CGI程序开一个独立进程。解决方法就是将经常用来编写CGI程序的语
言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP就可以以这种方式安装,虽然很少有人愿意这样以CGI方式安装它。内嵌的PHP可以具有更高的可伸缩性。
PHP免费安装
PHP源代码包安装版:这个版本适合已经有自己独立的网站域名、网站空间的专业网站建设用户。使用方法依然其为简单,只需三步:
*、到官方网站:下载 PHP源代码包安装版*版本,解压下载文件,将其中的全部内容上传到你的支持PHP的网站空间
第二、改更文件属性,请将根目录下以PHP为后缀名的文件和”/include/domain.php”和 “/attachments” 和 “/data”文件夹以及文件夹下所有的文件属性改成“可读”、“可写”、“可执行”,通常是“755”。
第三、打开你的网站根目录,系统会自动运行setup安装程序,按提示点下一步操作即可。
友情提示:当你下载我们的软件并看到这份说明时,则说明你一定是对企业网站建设有一定的需求或者你是一个网站建设技术学习者。
文件格式
对于只含有 php 代码的文件,我们将在文件结尾处忽略掉 "?>"。这是为了防止多余的空格或者其它字符影响到代码。
例如:
$foo = 'foo';
缩进应该能够反映出代码的逻辑结果,尽量使用四个空格,禁止使用制表符TAB,因为这样能够保证有跨客户端编程器软件的灵活性。
例如:
变量赋值建议保持相等间距和排列。
例如:
每行代码长度应控制在80个字符以内,最长不超过120个字符。因为 linux 读入文件一般以80列为单位,就是说如果一行代码超过80个字符,那么系统将为此付出额外操作指令。这个虽然看起来是小问题,但是对于追求完美的程序员来说也是值得注意并遵守的规范。
每行结尾不允许有多余的空格。
Php文件记事本编辑乱码问题
一般情况下,记事本编辑器在对文件进行完编辑并保存之时,其默认编码为ANSI,中文。然则更多的时候,php在语言环境设置时语言多数为utf-8,直接保存并用于apache等http-server解析后就会出现乱码。
为此,应该注意在用记事本编辑完后可将文件用“另存为”的方式对文件进行保存,并将“文件类型”选择“所有文件”,编码与文件指定语言编码一致即可。
算数运算符
PHP 的运算符包括算术运算符、赋值运算符、比较运算符和逻辑运算符。
算数运算符:
加,减,乘,除,取模(取余)
+、-、*、/、%
赋值运算符:(以下解释在许多书中有所不同)
赋值,加赋值,减赋值、乘赋值、除赋值,连字赋值
=、+=、-=、*=、/=、.=
位运算符:
位与、位或、位亦或、位非、左移、右移
&、|、^、~、<<、>>
比较运算符:
等于、全等于、不等于、不全等于、大于、小于、大于等于、小于等于
==、===、!=(<>)、!==、>、<、>=、<=
逻辑运算符:
逻辑与、逻辑或、逻辑非、逻辑亦或
&&、||、!、xor
字符串运算符:
. 连接两个字符串
$_SERVER是PHP语言中获取服务器相关资料的函数,显示相关函数代码。
具体函数:
$_SERVER['PHP_SELF'] #当前正在执行脚本的文件名,与 document root相关。
$_SERVER['argv'] #传递给该脚本的参数。
$_SERVER['argc'] #包含传递给程序的命令行参数的个数(如果运行在命令行模式)。
$_SERVER['GATEWAY_INTERFACE'] #服务器使用的 CGI 规范的版本。例如,“CGI/1.1”。
$_SERVER['SERVER_NAME'] #当前运行脚本所在服务器主机的名称。
$_SERVER['SERVER_SOFTWARE'] #服务器标识的字串,在响应请求时的头部中给出。
$_SERVER['SERVER_PROTOCOL'] #请求页面时通信协议的名称和版本。例如,“HTTP/1.0”。
$_SERVER['REQUEST_METHOD'] #访问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT”。
$_SERVER['QUERY_STRING'] #查询(query)的字符串。
$_SERVER['DOCUMENT_ROOT'] #当前运行脚本所在的文档根目录。在服务器配置文件中定义。
$_SERVER['HTTP_ACCEPT'] #当前请求的 Accept: 头部的内容。
$_SERVER['HTTP_ACCEPT_CHARSET'] #当前请求的 Accept-Charset: 头部的内容。例如:“iso-8859-1,*,utf-8”。
$_SERVER['HTTP_ACCEPT_Encoding'] #当前请求的 Accept-Encoding: 头部的内容。例如:“gzip”。
$_SERVER['HTTP_ACCEPT_LANGUAGE']#当前请求的 Accept-Language: 头部的内容。例如:“en”。
$_SERVER['HTTP_CONNECTION'] #当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。
$_SERVER['HTTP_HOST'] #当前请求的 Host: 头部的内容。
$_SERVER['HTTP_REFERER'] #链接到当前页面的前一页面的 URL 地址。
$_SERVER['HTTP_USER_AGENT'] #当前请求的 User_Agent: 头部的内容。
$_SERVER['REMOTE_ADDR'] #正在浏览当前页面用户的 IP 地址。
$_SERVER['REMOTE_HOST'] #正在浏览当前页面用户的主机名。
$_SERVER['REMOTE_PORT'] #用户连接到服务器时所使用的端口。
$_SERVER['SCRIPT_FILENAME'] #当前执行脚本的*路径名。
$_SERVER['SERVER_ADMIN'] #管理员信息
$_SERVER['SERVER_PORT'] #服务器所使用的端口
$_SERVER['SERVER_SIGNATURE'] #包含服务器版本和虚拟主机名的字符串。
$_SERVER['PATH_TRANSLATED'] #当前脚本所在文件系统(不是文档根目录)的基本路径。
$_SERVER['SCRIPT_NAME'] #包含当前脚本的路径。这在页面需要指向自己时非常有用。
$_SERVER['REQUEST_URI'] #访问此页面所需的 URI。例如,“/index.html”。
$_SERVER['PHP_AUTH_USER'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。
$_SERVER['PHP_AUTH_PW'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。
$_SERVER['AUTH_TYPE'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型。
$_SERVER['PATH_INFO'] #Contains any client-provided pathname information trailing the actual script filename but preceding the query string, if available. For instance, if the current script was accessed via the URL example/php/path_info.php/some/stuff?foo=bar, then$_SERVER['PATH_INFO'] would contain /some/stuff.
$_SERVER['ORIG_PATH_INFO'] #Original version of 'PATH_INFO' before processed by PHP.
相关技巧:
1.获取脚本网页地址二级路径:
案例如下,脚本网址路径“so/so/index.php”,需要“so/so/”这个地址,而地址是根据不同博客地址而变化的。其中“so”可用“$_SERVER['HTTP_HOST']”生成,但网络上却没有相关函数。
查找了php,发现一位网友有如下的生成思路:先用“$_SERVER['PHP_SELF']”生成脚本路径:“/so/index.php”,再用“$scriptname=end(explode('/',$_SERVER['PHP_SELF']));”截取脚本文件名:“index.php”,再用替换函数“$scriptpath=str_replace($scriptname,'',$_SERVER['PHP_SELF']);”获取二级路径:“/so/”。
然后使用显示二级路径,这样就解决了缺失函数问题。