第一部分 PHP的语法基础

第1章 PHP入门

PHP是一种简单、实用的动态网页编程语言,也是一种广泛用于Open Source(开放源代码)的,并适合Web开发且可以嵌入HTML的多用途脚本语言。本章内容覆盖了PHP语言的背景,PHP的历史,最新版本PHP5.0的特点,PHP的安装,以及运行环境的配置等内容,在最后还介绍了一个简单的PHP程序范例。

1.1 PHP技术介绍

PHP是Hypertext Preprocessor的缩写,代表“超级文本预处理语言”,是一种服务器端的HTML脚本/编程语言,也是一种简单的、面向对象的、解释型的、安全的、性能非常高的、独立于架构的、可移植的、动态的脚本语言。语言的风格有点类似于C语言,又传承了Java的简单精神,并创造一个比Java更容易使用的程序开发环境。它还混合了C、Java、Perl等语言,再加上PHP自创新的语法和提供了丰富的函数及功能,因此,PHP以方便快速的风格迅速在Web系统开发中占有了重要地位。

PHP作为开放源代码脚本语言,正成为世界上最流行的Web应用程序编程语言之一。PHP对于初学者来说非常简单,只需要很少的编程知识就能使用PHP建立一个真正交互的动态Web站点,同时也给专业程序员提供了各种高级的特性。

PHP主要应用于以下3个方面:

1.服务器端脚本:PHP最开始是被设计成用来创建动态Web网页的,PHP程序执行速度快,目前大量的网站都在使用PHP程序。PHP不仅可以生成HTML文件,而且还可以生成XML文档、图形、Flash动画和PDF文件等。

2.命令行脚本:PHP可以和Perl一样以命令行方式运行脚本,可以用命令行脚本来执行一些系统管理任务。

3.客户端GUI应用:对于非常精通PHP的开发人员,如果希望在客户端应用程序中使用PHP的一些高级特性,还可以利用PHP-GTK来编写跨平台的应用程序。

PHP最初是1994年由生于丹麦格陵兰岛的Rasmus Lerdorf创建的,刚刚开始只是一个简单的用Perl语言编写的程序,用来统计他自己网站的访问者。后来又用C语言重新编写,包括可以访问数据库。在1995年以Personal Home Page Tools (PHP Tools)开始对外发表第一个版本,Lerdorf写了一些介绍此程序的文档,并且发布了PHP1.0。在这一早期的版本中,提供了访客留言本、访客计数器等简单的功能。

在1995年年中,PHP2.0发布了。第二版定名为PHP/FI (Form Interpreter)。PHP/FI加入了对Mysql, SQL Server的支持,从此建立了PHP在动态网页开发上的地位。到了1996年年底,全世界就有15000个网站使用PHP/FI,而到1997年,据统计,使用PHP/FI的网站数字已经超过五万个。

在1997年,Rasmus Lerdorf开始了第三版的开发计划,Zeev Suraski及Andi Gutmans等人加入到了开发小组中,第三版定名为PHP3。

2000年5月,PHP 4.0正式发布。它使用了Zend (Zeev + Andi)引擎,提供更高的性能,同时还包含了其他一些关键功能,比如:支持更多的Web服务器、HTTP Sessions的支持、输出缓存(Output Buffering)、更安全的处理用户输入的方法以及一些新的语言结构。

PHP的特性包括:

● 开放的源代码:所有的PHP源代码都是可以得到的,而且PHP是免费的。

● 基于服务器端:PHP是运行在服务器端的,充分利用了服务器的性能;PHP执行引擎还会将用户经常访问的PHP程序驻留在内存中,其他用户在一次访问这个程序时就不需要重新编译了,只要直接执行内存中的代码就可以了,这也是PHP高效率的体现之一。

● 跨平台:PHP可以在所有的主流操作系统上运行,包括Linux、Unix的各种变种(包括HP-UX、Solaris和OpenBSD)、Microsoft Windows、Mac OS X、RISC OS等。PHP已经支持了大多数的Web服务器,包括Apache、Microsoft Internet Information Server (IIS)、Personal Web Server (PWS)、Netscape以及iPlant server、Oreilly Website Pro Server、Caudium、Xitami、OmniHTTPd等。对于大多数的服务器,PHP均提供了一个相应模块;PHP支持CGI标准,使得PHP能够作为CGI处理器来工作;PHP还支持ODBC,即Open Database Connection Standard(开放数据库连接标准),因此可以连接任何其他支持该世界标准的数据库。但PHP提供的数据库接口支持彼此不统一,比如对Oracle, MySQL, Sybase的接口,彼此都不一样。

● 效率高:PHP消耗相当少的系统资源。

● 图像处理:PHP能动态创建图像。

● 支持利用诸如LDAP、IMAP、SNMP、NNTP、POP3、HTTP、COM (Windows环境)等协议服务。可以开放原始网络端口,使得任何其他的协议能够协同工作。PHP支持和所有Web开发语言之间的WDDX复杂数据交换。关于相互连接,PHP已经支持了对Java对象的即时连接,并且可以将他们自由地用作PHP对象。

● 有效的文本处理特性:支持从POSIX扩展或者Perl正则表达式到XML文档解析。为了解析和访问XML文档,支持了SAX和DOM标准,可以使用XSLT扩展库来转换XML文档。

提示:正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。正则表达式是由普通字符(例如字符a到z)以及特殊字符(称为元字符)组成的文字模式,它作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

PHP4.0与以前的版本相比,整个脚本程序的核心改动较大,它让程序执行速度更快。其脚本描述更强大并且更复杂,最显著的特征是速率比的增加。PHP4.0这些优异的性能是PHP脚本引擎重新设计产生的结果:引擎由Zeev Suraski和Andi Gutmans从底层全面重写。PHP4.0使用Zend脚本引擎,使用了一种更有效的“编译——执行”方式,而不是PHP 3.0采用的“执行——当解析时”模型。

虽然PHP4.0新增了许多特性,但是PHP4.0的面向对象性能很弱。

1.2 PHP5.0的新特点

2004年7月13日,官方正式版PHP 5.0发布,对于PHP语言本身还是PHP的用户来讲,PHP5发布都算得上是一个里程碑式的版本,使PHP成为一个设计完备、真正具有面向对象能力的脚本语言。

PHP5.0发布之前的各个PHP版本以简单的语法、丰富的库函数以及极快的脚本解释执行速度,赢得了许多开发者的青睐,几乎成为Linux、Unix平台上首选的WEB开发语言。然而,站在语言本身角度,PHP的语法,特别是面向对象(Object Oriented, OO)方面的语法设计并不完善。大量的库函数加入其中,而语言模型的发展则相对缓慢。虽然在PHP4.0中加入了面向对象的设计,但其语言模型并不完善,PHP4.0版本中,诸如析构函数、抽象类(接口)、异常处理等基本元素的类缺乏,极大限制了利用PHP来完成大规模应用程序的能力。

而PHP5.0的诞生,则从根本上改变了PHP的上述弊端。Zend II引擎的采用,完备对象模型、改进的语法设计,终于使得PHP成为一个设计完备、真正具有面向对象能力的脚本语言。

PHP5.0版本增加或增强了以下功能:

● 支持新的对象模型和许多新特点的Zend引擎。

● 新的SimpleXML扩展,PHP对象轻松访问操作。

● XML功能:PHP5.0版本支持可直观地访问XML数据、名为SimpleXML的XML处理界面,同时还强化了XML Web服务支持,而且支持SOAP扩展模块。

● 数据库方面:PHP新版本不仅提供了访问MySQL的新界面——MySQLi的功能,还可以使用面向对象界面和预处理语句(Prepared Statement)等MySQL的新功能。

另外,PHP5.0上还捆绑有小容量的RDBMS——SQLite。

● 改进了流的设计,包括通过流来操作底层的socket。

● 新增了许多函数:PHP5.0中新添了一些函数,下面是新增函数列表:

表1-1 PHP5.0新增函数表

续表

续表

1.3 安装和配置PHP

1.3.1 在Windows下安装PHP5.0

PHP需要Web服务器来支持运行,下面以两种最常见的服务器IIS和Apache2服务器为例来分别介绍PHP的安装。如果不加特殊说明,以下的介绍同时适用于Windows xp、Windows 2000、Windows 2003各版本。

1. IIS服务器

在Windows 2000中,IIS默认是安装的,可以通过“开始”→“设置”→“控制面板”→“管理工具”→ "Internet信息服务”来打开它。Windows xp没有默认安装,可以通过Windows的“开始”→“设置”→“控制面板”→“添加删除程序”→“添加/删除Windows组件”来安装它。

最新的PHP安装程序包可以在PHP的官方网站:http://www.php.net/downloads.php下载。把下载来的PHP安装程序包解压缩到C盘根目录(用户也可以选择其他不同的目录),解压缩后将目录名改为 "PHP"。

(1)打开刚才解压缩的PHP目录,有一个名为 "php.ini-dist" 的文件,就是PHP的配置文件了,将此文件改名成 "php.ini",然后复制到系统目录中(如果用户的系统装在C盘,XP下就是 "C:\windows" , Windows2000下是 "C:\winnt")。php.ini文件可以存放在系统目录中,也可以和php.exe存放在同一目录中。

(2)打开IIS信息服务控制台,右击“默认网站”图标。选择“属性”选项,打开“默认网站属性”选项,然后再选择“主目录”选项,如下图1-1所示。

图1-1 IIS服务器主目录

(3)单击“配置”按钮,用户会在弹出来的看到已经定义的文档类型。单击“添加”按钮,在接着弹出来的对话框的可执行文件文本框中敲入用户的php.exe所在的绝对路径加上“%s %s",在这里是 "c:\php\php.exe %s %s",扩展名文本框中写上php程序处理的后缀名,在这里写入“.php",其余选项按默认设置即可,如图1-2所示。

图1-2 添加PHP扩展名映射

Windows 2003增强了IIS的安全性,配置方法与Window 2000和Windows xp的配置方法不同,配置方法如下:

步骤(1)和(2)与前面介绍的方法相同。

(3)应用程序配置,如图1-3所示。

图1-3 应用程序配置

(4)单击 "Web服务扩展”→“新建Web服务扩展”。

图1-4 新建Web服务扩展

(5)将新建Web服务扩展的“扩展名”改为 "php",然后添加 "php.exe路径”。

(6)选择php的服务扩展,然后单击“允许”。

图1-5 添加php.exe路径

图1-6 php的服务扩展

至此,IIS服务器的PHP安装就完成了。

2. Apache2服务器

Apache安装比较简单,下面介绍在Windows操作系统上安装Apache2.0.55的过程,具体步骤如下:

(1)首先到Apache的官方网站(http://www.apache.org/)上下载安装包,运行该安装包,将出现如图1-7所示的界面。

图1-7 Apache安装界面

(2)出现Apache HTTP Server 2.0.55的安装向导界面,单击 "Next" 继续。

图1-8 安装使用许可

(3)确认同意软件安装使用许可条例,选择 "I accept the terms in the license agreement",单击 "Next" 继续。

(4)阅读完将Apache安装到Windows上的使用须知后,单击 "Next" 继续。

(5)设置系统信息,在Network Domain下填入用户的域名(比如:163.com),在Server Name下填入服务器名称(比如:www.163.com,也就是主机名加上域名),在Administrator' s Email Address下填入系统管理员的联系电子邮件地址(比如:163@163.com),上述三条信息仅供参考,其中联系电子邮件地址会在发生系统故障时提供给访问者,三条信息均可任意填写,无效的也行。下面有两个选择,图片上选择的是为系统所有用户安装,使用默认的80端口,并作为系统服务自动启动;另外一个是仅为当前用户安装,使用端口8080,手动启动。一般选择如图1-10所示,单击 "Next" 继续。

图1-9 使用须知

图1-10 设置系统信息

(6)选择安装类型,Typical为默认安装,Custom为用户自定义安装,这里选择Custom,有更多可选项,单击 "Next" 继续。

图1-11 安装类型

(7)出现选择安装选项界面,如图1-12所示,单击 "Apache HTTP Server 2.0.55”,选择 "This feature, and all subfeatures, will be installed on local hard drive.”,即“此部分,及下属子部分内容,全部安装在本地硬盘上”,单击 "Change...”,手动指定安装目录,安装路径如图1-13所示。

图1-12 安装选项界面

图1-13 安装路径

(8)在这里选择安装在 "D:\”,可以自行选取,一般建议不要安装在操作系统所在盘,免得操作系统崩溃了之后,还原操作把Apache配置文件也清除了,单击 "OK" 继续,安装界面如图1-14所示。

图1-14 安装界面

(9)返回刚才图1.14的安装界面,单击 "Next" 继续,安装选项确认界面如图1-15所示。

图1-15 安装选项确认界面

(10)确认安装选项无误,如果认为要再检查一遍,可以单击 "Back",一步步返回检查,单击 "Install" 开始按前面设定的选项进行安装,正在安装界面如图1-16所示。

图1-16 正在安装界面

(11)正在安装界面,请耐心等待,直到出现如图1-17所示的画面为止。

图1-17 安装向导完成界面

(12)安装向导成功完成后,在屏幕右下角的状态栏应该出现了如图1-18所示的绿色图标,表示Apache服务已经开始运行,单击 "Finish" 结束Apache的软件安装。

图1-18 Apache图标

在图标上单击鼠标左键,出现如图1-19所示的Apache图标右键菜单界面,有 "Start(启动)”、 "Stop(停止)”、 "Restart(重启动)”三个选项,可以很方便地对安装的Apache服务器进行上述操作。

图1-19 Apache图标右键菜单

现在来测试一下按默认配置运行的网站界面,在IE地址栏打http://127.0.0.1(或者http://localhost),单击“转到”,就可以看到如图1-20所示的页面,表示Apache服务器已安装成功。

图1-20 Apache服务器已安装成功界面

现在开始配置Apache服务器,使它更好地为用户服务。事实上,如果不配置,用户安装目录下的Apache2\htdocs文件夹就是网站的默认根目录,在里面放入文件就可以了。单击“开始”→“程序”→ "Apache HTTP Server 2.0.55”,选择 "Configure Apache Server",单击 "Edit the Apache httpd conf Configuration file" 菜单,就可以打开编辑Apache配置文件。

每次配置文件的改变,保存后,必须在Apache服务器重启动后生效。

下面,使用editplus软件对httpd.conf进行编辑配置,如图1-21所示。配置Apache服务器的具体步骤如下:

图1-21使用editplus编辑配置httpd.conf

(1)查找关键字 "DocumentRoot"(也就是网站根目录),找到后将引号("")内的地址改成所建网站的根目录,一般文件地址的“\”在Apache里要改成“/”,如图1-22所示。

图1-22 指定DocumentRoot

(2)通过查找“<Directory" 来定位,将引号("")内的地址改成跟DocumentRoot的一样,如图1-23所示。

图1-23 指定Directory目录

(3)查找关键字 "DirectoryIndex"(目录索引,也就是在仅指定目录的情况下,默认显示的文件名),可以添加很多文件名,系统会根据从左至右的顺序来优先显示,以单个半角空格隔开。比如有些网站的首页是index.htm,就在光标那里加上 "index.htm"。这些文件名是任意的,不一定非得是 "index.html",比如 "index.php" 等,都可以,如图1-24所示。

图1-24 指定DirectoryIndex

(4)这里有一个选择配置选项,以前可能要配置,在5.0版本就不用配置了,就是强制所有输出文件的语言编码,html文件里有语言标记(<META http-equiv="Content-Type"content="text/html; charset=gb2312">,这个语言标记就是设定文档语言为gb2312)的也会强制转换。如果打开的网页出现乱码,请先检查网页内有没有上述html语言标记,如果没有,添加上去就能正常显示了。把“# DefaultLanguage nl" 前面的“#”去掉,把 "nl" 改成要强制输出的语言,中文是 "zh-cn",如图1-25所示。

图1-25 默认语言编码

(5)简单的Apache配置就到此结束了,现在利用先前的小图标重启动,所有的配置就生效了。

在Apache2服务器中,PHP的安装有两种不同模式,一种是CGI模式(CGI executable)安装方式,另一种是模块化安装方式。在CGI模式安装方式下,如果客户机请求一个PHP文件,Web服务器就调用php.exe去解释这个文件,然后再把解释的结果以网页的形式返回给客户机。而在模块化安装方式中,PHP是与Web服务器一起启动并运行的,所以从某种角度上来说,以Apache模块方式安装的PHP5.0有着比CGI模式更好的安全性以及更好的执行效率和速度。

下面介绍PHP的安装与配置,具体步骤如下:

(1)将下载的PHP安装文件php-5.0.5-Win32.zip右键解压缩,如图1-26所示。

图1-26 解压

(2)指定解压缩的位置,假设安装在 "D:\php" 目录下,如图1-27所示。

图1-27 解压目录

(3)查看解压缩后的文件夹内容,找到 "php.ini-dist" 文件,将其重命名为 "php.ini",打开编辑,查找 "register_globals",找到有一个 "register_globals = Off" 值,如图1-28所示,这个值是用来打开全局变量的,比如表单送过来的值,如果这个值设为 "Off",就只能用“$_POST[’变量名’]、$_GET[’变量名’]”等来取得送过来的值,如果设为 "On",就可以直接使用“$变量名”来获取送过来的值。如果不需要兼容以前的PHP程序,请设register_globals的值为 "Off",可以增强PHP程序的安全性。

图1-28 设置register_globals

(4)设置要加载的模块,功能就是使PHP能够直接调用其他模块,比如访问mysql,如图1-29所示,选择要加载的模块,去掉前面的“; ”,就表示要加载此模块了。比如要加载mysql模块,就把“; extension=php_mysql.dll" 前的“; ”去掉。所有的模块文件都放在php解压缩目录的 "ext" 之下。要想加载的模块进行工作还需要设置extension_dir的值,该值设置模块所在的目录,例如:extension_dir = "D:/ php/ext/"。

图1-29 加载模块

(5)按照以上操作,PHP的配置基本完成。还需要配置Apache服务器的配置文件httpd.conf,打开httpd.conf文件,在最后添加以下命令,如图1-30所示:

图1-30 系统变量配置

        ScriptAlias /php/ "D:/ php/"
        Action application/x-httpd-php "/php/php-cgi.exe"
        AddType application/x-httpd-php .php
        AddType application/x-httpd-php .php3
        AddType application/x-httpd-php .php4

(6)上面的ScriptAlias命令设置PHP所在目录,Action命令设置PHP解析处理程序,AddType命令设置支持的文件后缀名。重启Apache服务器,使用设置生效。

(7)现在开始将PHP以module方式与Apache相结合,使PHP融入Apache,先打开Apache的配置文件httpd.conf,在文件最后,添加如图1-31所示选中的三行,第一行 "PHPIniDir "c:/windows" ”是指明PHP配置文件php.ini所在的位置,第二行 "LoadFile"D:/WEB/php5/php5ts.dll"”加载php5ts.dll文件,第三行 "LoadModule php5_module"D:/WEB/php5/php5apache2.dll"”指明以模式方式运行PHP,其中的 "D:/WEB/php5/”要改成PHP的安装目录。复制PHP安装目录下的libmysql.dll、libmhash.dll、libmcrypt.dll、libeay32.dll、fdftk.dll、fribidi.dll、gds32.dll、msql.dll、ssleay32.dll和yaz.dll至系统目录 "C:\WINDOWS\system32”中,如果操作系统不是Windows XP或Windows 2003请修改正确的system32目录路径。如果不复制上述文件,可能导致有些功能模块不能加载,比如:mysql.dll模块。

图1-31 以module方式加载PHP

(8)在Apache的配置文件httpd.conf的最后,加入 "AddType application/x-httpdphp .php" 、 "AddType application/x-httpd-php .php3”等,指明可以执行PHP的文件类型,如图1-32所示。

图1-32 配置可执行PHP的文件格式

(9)目录默认索引文件可以在Apache的配置文件httpd.conf中设置,因为现在加了PHP模块,也可以把 "index.php" 设为默认索引文件,优先顺序可以自由设置,设置如图1-33所示。

图1-33 默认索引文件

(10)至此,PHP的安装和Apache的结合已经全部完成,重启Apache服务,用户的Apache服务器就支持了PHP。

1.3.2 在Linux平台下安装PHP

下面介绍在Linux下如何安装PHP、MySQL5和Apache2。MySQL5的下载地址为http://mysql.org/downloads/mysql/5.0.html。PHP5.0可从Php.net下载,下载地址为:http://www.php.net/downloads.php。Apache 2可以从Apache.org下载。可能还需要以下的支持库:libxml2库从XmlSoft.org下载,zlib库从Gzip.org下载。

1.解压安装包(建议解压在同一目录中)

        $ tar -xzvf mysql-max-5.0.15-linux-i686.tar.gz
        $ tar -xzvf php-5.0.5.tar.gz
        $ tar -xzvf httpd-2.0.50.tar.gz
        $ tar -xzvf libxml2-2.6.11.tar.gz
        $ tar -xzvf zlib-1.2.1.tar.gz

2.安装支持库(安装前建议检查文件夹usr/local下的内容)

检查是否安装了libxml2或者zlib,如果没有安装的话,按照如下步骤进行安装:

编译和安装libxml2 XML解析器:

        $ cd /解压目录/libxml2-2.6.11
        $ ./configure(默认装到了/usr/local/lib下,指定的话用--profix=/目录)
        $ make && make install

对zlib做类似的操作:

        $ cd /解压目录/zlib-1.2.1
        $ ./configure(默认装到了/usr/local/lib下,指定的话用--profix=/目录)
        $ make && make install

3.安装Apache

Apache使用PHP有两种方式:作为动态模块,其在运行状态时可载入到Web服务器,或者作为静态模块,其可直接编译到Web服务器代码中。

为了能以Apache2.0模块使PHP动态载入,Apache服务器必须以动态共享对象(DSO, Dynamic Shared Object)编译。可以通过传递--enable-so参数到Apache 2.0configure使这一特性生效:

        $ cd /解压目录/httpd-2.0.50
        $ ./configure --prefix=/usr/local/apache2--enable-so
        $ make && make install

4. MySQL5的安装(如系统已经安装了mysql,则下述相应步骤可以省略)(下载二进制包直接解压在/usr/local下)。

        $groupadd mysql
        $useradd -g mysql mysql
        $ln -s mysql mysql
        $cd mysql
        $scripts/mysql_install_db --user=mysql
        chown -R root .
        chown -R mysql date
        chown -R mysql

如果想测试MySQL是否安装成功,关闭原有的mysql服务,进入目录下的bin目录下执行如下操作:

        ./safe_mysqld

启动MySQL服务。

        ./mysql -u root -p密码

进入MySQL。

5.php的安装

        $ ./configure --prefix=/usr/local/php5(配置php的参数)
        --with-apxs2=/usr/local/apache2/bin/apxs
        --with-libxml-dir=/usr/local/lib
        --with-zlib-dir=/usr/local/lib
        --with-mysql=/usr/local/mysql (mysql的安装目录就是那个解压后的目录)
        --with-mysqli=/usr/local/mysql/bin/mysql_config
        --with-gd --enable-soap --enable-sockets
        $ make
        $ make install

将安装目录下的php.ini-dist文件改为php.ini,存放到/usr/local/lib目录下。

6.编辑Apache配置文件,即/usr/local/apache2/conf/httpd. conf,并添加如下一行:

        AddType application/x-httpd-php .php

7.并在DirectoryIndex的那一行加上index.php,保存文件并重启动服务器。

注意:

(1)要以root用户安装;

(2)在启动Apache和MySQL服务器时应确保原有的服务关闭;

(3)配置文件修改后必须重启服务器。

1.3.3 验证PHP安装

配置完成后,想测试PHP是否安装成功,可以在空根目录下建立一个测试PHP程序文件,如:phpinfo.php,然后写入简单的PHP代码,如:

        <?
        phpinfo ();
        ?>

保存后,使用浏览器访问http://localhost/phpinfo.php如果能见到如图1-34所示界面,而无错误提示,就表明配置PHP环境成功。

图1-34 PHP运行环境测试

1.4 PHP配置文件

php.ini是PHP在启动时会读取的配置文件。在PHP 5.x版的配置文件为php.ini-dist;若PHP安装成服务器的模块,则在Web服务器启动执行时会读取,之后就不再读取。因此,改动配置的话要重新启动Web服务器。若使用CGI方式运行时,每处理一个请求就要启动一个CGI进程,当请求繁忙时,这将给服务器带来繁重的负担。

PHP5.0的php.ini配置文件详细介绍如下:

       ;这个文件控制了PHP许多方面的观点。为了让PHP读取这个文件,它必须被命名为
        ; ' php.ini'。PHP将在这些地方依次查找该文件:当前工作目录;环境变量PHPRC
       ;指明的路径;编译时指定的路径。
       ;在Windows下,编译时的路径是Windows安装目录。
       ;在命令行模式下,php.ini的查找路径可以用-c参数替代。
       ;该文件的语法非常简单。空白字符和用分号’’开始的行被简单地忽略。
       ;章节标题(例如:[Foo])也被简单地忽略,即使将来它们可能有某种的意义。
        ;
       ;指示被指定使用如下语法:
       ;指示标识符=值
        ; directive = value
       ;指示标识符是大小写敏感的,foo=bar不同于FOO=bar。
        ;
       ;值可以是一个字符串,一个数字,一个PHP常量(如:E_ALL or M_PI), INI常
       ;量中的一个(On, Off, True, False, Yes, No and None),或是一个表达式
        ;(如:E_ALL & ~E_NOTICE),或是用引号括起来的字符串("foo")。
        ;
        ; INI文件的表达式被限制于位运算符和括号。
        ; — itwise OR
        ; & itwise AND
        ; ~ itwise NOT
        ; ! boolean NOT
        ;
       ;布尔标志可用1, On, True or Yes这些值置于开的状态。
       ;它们可用0, Off, False or No这些值置于关的状态。
        ;
       ;一个空字符串可以用在等号后不写任何东西表示,或者用None关键字:
        ;
        ; foo=  ;将foo置为空字符串
        ; foo=none;将foo置为空字符串
        ; foo="none";将foo置为字符串’none'
        ;
       ;如果在值设置中使用常量,而这些常量属于动态调入的扩展库(不是PHP的扩展,
       ;就是Zend的扩展),仅可以调入这些扩展的行之后使用这些常量。
        ;
       ;所有在php.ini-dist文件里设定的值与内建的默认值相同(这是说,如果php.ini
       ;没被使用或者删掉了这些行,默认值与之相同)。
        ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
       ;语言选项;
        ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
        engine   =On
       ;使PHP scripting language engine (PHP脚本语言引擎)在Apache下有效。
        short_open_tag = On
       ;允许tags将被识别。
        asp_tags  =Off
       ;允许ASP类型tags
        precision  =14
       ;浮点类型数显示时的有效位数
        y2k_compliance = Off
       ;是否打开2000年适应(可能在非Y2K适应的浏览器中导致问题)
        output_buffering = Off
       ;输出缓存允许在输出正文内容之后发送header(标头,包括cookies)行,
       ;其代价是使输出层减慢速度。可以在运行时打开输出缓存,
       ;或者在这里将指示设为On而使得所有文件的输出缓存打开。
        output_handler  =
       ;可以重定向脚本的所有输出到一个函数,那样做可能对处理或以日志记录它有用。例
       ;如将这个output_handler设为"ob_gzhandler",则输出会被透明地为支持gzip或deflate
       ;编码的浏览器压缩。设一个输出处理器自动地打开输出缓冲。
        implicit_flush  =Off
       ;强制flush(刷新)让PHP告诉输出层在每个输出块之后自动刷新自身数据。
       ;这等效于在每个print ()或echo ()调用和每个HTML块后调用flush ()函数。
       ;打开这项设置会导致严重的运行时冲突,建议仅在debug过程中打开。
        allow_call_time_pass_reference = On
       ;是否让强迫函数调用时按引用传递参数。
       ;这一方法可能在将来版本的PHP/Zend里不再支持。
       ;指定哪些参数按引用传递的方法是在函数声明里。
       ;可以尝试关闭这一选项并确认脚本仍能正常工作,以保证在将来版本的语言里它们
       ;仍能工作(将在每次使用该特点时得到一个警告)。
        ; Safe Mode安全模式
        safe_mode  =Off
        safe_mode_exec_dir =
        safe_mode_allowed_env_vars = PHP_
        ; ? Setting certain environment variables
        ; ? may be a potential security breach.
       ;该指示包含用逗号分隔的前缀列表。
       ;安全模式中,用户仅可以替换以在此列出的前缀开头的环境变量的值。
       ;默认地,用户将仅能设定以PHP_开头的环境变量,(如:PHP_FOO=BAR)。
       ;注意:如果这一指示为空,PHP将允许用户更改任意环境变量!
        safe_mode_protected_env_vars = LD_LIBRARY_PATH
       ;这条指示包含一个用逗号分隔的环境变量列表,那是最终用户不能用putenv ()更
       ;改的。这些变量甚至在safe_mode_allowed_env_vars设置为允许的情况下得到保护。
        disable_functions =
       ;这条指示可以为了安全的原因而让特定函数失效。
       ;它接受一个用逗号分隔的函数名列表。
       ;这条指示不受安全模式是否打开的影响。
       ;语法高亮模式的色彩。
       ;只要能被接受的东西就能工作。
        highlight.string = #DD0000
        highlight.comment = #FF8000
        highlight.keyword = #007700
        highlight.bg  =#FFFFFF
        highlight.default = #0000BB
        highlight.html  =#000000
        ; Misc杂项
        expose_php = Off
       ;决定PHP是否标示它装在服务器上的事实(例如:加在它给Web服务
       ;发送的信号上)。在出现什么power-by的header的时候,可以把它关掉。
       ;它不会有安全上的威胁,但它使检查服务器上是否安装了PHP成为了可能。
        ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
        ; Resource Limits ;
        ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
        max_execution_time=30   ;每个脚本的最大执行时间,按秒计
        memory_limit=8388608   ;一个脚本最大可使用的内存总量(这里是8MB)
        ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
        ; Error handling and logging ;
       ;    出错控制和登记      ;
        ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
       ;错误报告是按位的,将数字加起来就能得到想要的错误报告等级。
        ; E_ALL   - 所有的错误和警告
        ; E_ERROR   - 致命性运行时错
        ; E_WARNING   - 运行时警告(非致命性错)
        ; E_PARSE   - 编译时解析错误
        ; E_NOTICE   - 运行时提醒(这些经常是你代码的bug引起的,
       ;也可能是有意的行为造成的,如:基于未初始化的变量自动初始化为一个空字符串
       ;的事实而使用一个未初始化的变量。
        ; E_CORE_ERROR  - 发生于PHP启动时初始化过程中的致命错误
        ; E_CORE_WARNING- 发生于PHP启动时初始化过程中的警告(非致命性错)
        ; E_COMPILE_ERROR- 编译时致命性错
        ; E_COMPILE_WARNING- 编译时警告(非致命性错)
        ; E_USER_ERROR  - 用户产生的出错消息
        ; E_USER_WARNING- 用户产生的警告消息
        ; E_USER_NOTICE  - 用户产生的提醒消息
       ;例子:
        ; error_reporting=E_ALL&~E_NOTICE;显示所有的错误,除了提醒
        ; error_reporting=E_COMPILE_ERROR—E_ERROR—E_CORE_ERROR;仅显示错误
        display_errors = On
       ;显示出错误信息(作为输出的一部分),在最终发布的Web站点上,
       ;强烈建议关掉这个特性,并使用错误日志代替(参看下面)。
       ;在最终发布的Web站点继续让display_errors有效,可能会暴露一些有关安全的信
       ;息,例如Web服务上的文件路径、数据库规划或别的一些信息。
        display_startup_errors = Off
       ;甚至当display_erroes打开了,发生在PHP的启动步骤中的错误也不会被显示。
       ;强烈建议保持使display_startup_errors关闭,除了在改错过程中。
        log_errors  =Off
       ;在日志文件里记录错误(服务器指定的日志,stderr标准错误输出,或下面error_log
       ;指定的日志),强烈建议在最终发布的Web站点以日志记录错误取代直接错误输出。
        track_errors=Off;保存最近一个错误/警告消息于变量 $php_errormsg (boolean)中。
        ; error_prepend_string="";在错误信息前输出的字符串
        ; error_append_string="";在错误信息后输出的字符串
        ; error_log=filename;以指定文件记录错误日志
        ; error_log=syslog ;在系统日志syslog (NT下的事件日志,Windows 95下无效)
       ;中记录错误日志
        warn_plus_overloading=Off ;当将‘+’用于字符串时警告
        ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
        ; Data Handling ;
        ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
        variables_order  ="EGPCS"
       ;这条指示描述了PHP记录GET, POST, Cookie, Environment and Built-in这些变量
       ;的顺序(以G, P, C, E&S代表,通常以EGPCS或GPC的方式引用)。
       ;按从左到右记录,新值取代旧值。
        register_globals = On
       ;是否将这些EGPCS变量注册为全局变量。若不想让用户数据不在全局范围内混乱
       ;的话,就要关闭它。这和track_vars连起来用更有意义,这样就可以通过
        ;  $HTTP_*_VARS[] 数组访问所有的GPC变量。
        register_argc_argv = On
       ;告诉PHP是否声明argv和argc变量(注:这里argv为数组,argc为变量数),
       ;其中包含用Get方法传来的数据,若不想用这些变量,应当关掉它以提高性能。
        track_vars   =On
       ;使$HTTP_*_VARS[]数组有效,这里*在使用时用ENV, POST, GET, COOKIE or
        ; SERVER替换。
        post_max_size  =8M  ; PHP将接受的POST数据的最大大小。
        gpc_order   ="GPC";这条指示被人反对。用variables_order代替。
        ; Magic quotes
        magic_quotes_gpc = On
       ;在输入的GET/POST/Cookie数据里使用魔术引用,魔术引用是指用转义符加在引用
       ;性的控制字符上,如 \’等。
        magic_quotes_runtime= Off
       ;对运行时产生的数据使用魔术引用,比如用SQL查询得到的数据,用exec ()函数得
       ;到的数据,等等。
        magic_quotes_sybase=Off ;采用Sybase形式的魔术引用(用 ’ ’ 脱出 ’ 而不用 \')
       ;自动在PHP文档之前和之后添加文件
        auto_prepend_file =
        auto_append_file =
       ;像4.04b4一样,PHP默认地总是在  "Content-type:” 头标输出一个字符的编码方
       ;式。让输出字符集失效,只要设置为空即可。
        ; PHP的内建默认值是text/html
        default_mimetype = "text/html"
        ; default_charset = "iso-8859-1"
        ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
        ; Paths and Directories ;
        ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
        include_path =
        ; include路径设置,UNIX: "/path1:/path2"  Windows: "\path1; \path2"
        doc_root  =
        ; php页面的根路径,仅在非空时有效
        user_dir  =
       ;告知php在使用/~username打开脚本时到哪个目录下去找,仅在非空时有效
        ; upload_tmp_dir =
       ;存放用HTTP协议上传的文件的临时目录(在没指定时使用系统默认的)
        upload_max_filesize = 2097152
       ;文件上传默认地限制为2 Meg
        extension_dir = c:\php\
       ;存放可加载的扩充库(模块)的目录
        enable_dl  =On
       ;是否使dl ()有效。
       ;在多线程服务器上dl ()函数不能很好地工作,例如IIS or Zeus,并在其上默认为禁止
        ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
        ; File Uploads ;
        ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
        file_uploads = On
       ;是否允许以HTTP方式上传文件
        ; upload_tmp_dir =
       ;指定用HTTP上传的文件的临时目录(未指定则使用系统默认)
        upload_max_filesize = 2M
       ;上传文件的最大许可大小
        ; Fopen wrappers ;
        ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
        allow_url_fopen = On
       ;是否允许把URLs当作http:.. 或把文件当作ftp:...
        ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
       ;    动态扩展    ;
        ; Dynamic Extensions ;
        ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
       ;若希望自动加载一个扩展库,用下面的语法:
        ;   extension=modulename.extension
       ;例如,在Windows上,extension=msql.dll
       ;在UNIX下,extension=msql.so
       ;注意,这只应当是模块的名字,不需要将目录信息放在里面。
       ;用上面的extension_dir指示指定扩展库的位置。
        ; Windows扩展
        ; extension=php_nsmail.dll
        extension=php_calendar.dll
        ; extension=php_dbase.dll
        ; extension=php_filepro.dll
        extension=php_gd.dll
        ; extension=php_dbm.dll
        ; extension=php_mssql.dll
        ; extension=php_zlib.dll
        ; extension=php_filepro.dll
        ; extension=php_imap4r2.dll
        ; extension=php_ldap.dll
        ; extension=php_crypt.dll
        ; extension=php_msql2.dll
        ; extension=php_odbc.dll
       ;注意,MySQL的支持现在是内建的,因此不需要用它的dll
        ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
       ;   模块设定  ;
        ; Module Settings ;
        ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
        [Syslog]
        define_syslog_variables = Off
       ;是否定义各种系统日志变量,如:$LOG_PID, $LOG_CRON,等等。
       ;关掉它可以提高效率,运行时可以调用函数define_syslog_variables ()来定义这些变量
        [mail function]
        SMTP   =localhost  ;仅用于Win32系统
        sendmail_from = me@localhost.com;仅用于Win32系统
        ; sendmail_path=    ;仅用于unix,也可支持参数(默认的是’sendmail-t-i')。
        [Debugger]
        debugger.host = localhost
        debugger.port = 7869
        debugger.enabled = False
        [Logging]
       ;这些配置指示用于示例的日志记录机制。
        ; logging.method   =db
        ; logging.directory = /path/to/log/directory
        [Java]
        ; java.class.path = .\php_java.jar
        ; java.home = c:\jdk
        ; java.library = c:\jdk\jre\bin\hotspot\jvm.dll
        ; java.library.path = .\
        [SQL]
        sql.safe_mode = Off
        [ODBC]
        ; uodbc.default_db  =Not yet implemented
        ; uodbc.default_user  =Not yet implemented
        ; uodbc.default_pw  =Not yet implemented
        uodbc.allow_persistent=On;允许或禁止持久连接
        uodbc.check_persistent  =  On;在重用前检查连接是否还可以用
        uodbc.max_persistent=-1;持久连接的最大数,-1代表无限制。
        uodbc.max_links   =-1;连接的最大数目(持久和非持久), -1代表无限制。
        uodbc.defaultlrl=4096;控制LONG类型的字段,返回变量的字节数。
        uodbc.defaultbinmode =  1;控制二进制数据,0代表通过,1返回原样,2转换为字符。
        [MySQL]
        mysql.allow_persistent=On;允许或禁止持久连接。
        mysql.max_persistent=-1;持久连接的最大数,-1代表无限制。
        mysql.max_links   =-1;连接的最大数目(持久和非持久), -1代表无限制。
        mysql.default_port  =
        ; mysql_connect ()使用的默认端口,如不设置,mysql_connect ()将使用变量。
        ;$MYSQL_TCP_PORT,或在/etc/services下的mysql-tcp条目(unix),或在编译时
       ;定义的MYSQL_PORT(按这样的顺序),在Win32环境,将仅检查MYSQL_PORT。
        mysql.default_socket= ;用于本地MySql连接的默认套接字名,
       ;为空则使用MySql内建值。
        mysql.default_host  =  ; mysql_connect ()默认使用的主机(安全模式下无效)。
        mysql.default_user  =  ; mysql_connect ()默认使用的用户名(安全模式下无效)。
        mysql.default_password=  ; mysql_connect ()默认使用的密码(安全模式下无效)。
       ;注意,在这个文件下保存密码通常不是一个好方法,任何可以使用PHP访问的用户都
       ;可以运行’echo cfg_get_var ("mysql.default_password")’来显示那个密码!
       ;而且当然地,任何有读该文件权力的用户也能看到那个密码。
        [mSQL]
        msql.allow_persistent=On;允许或禁止持久连接。
        msql.max_persistent  =-1;持久连接的最大数,-1代表无限制。
        msql.max_links   =-1;连接的最大数目(持久和非持久), -1代表无限制。
        [PostgresSQL]
        pgsql.allow_persistent=On;允许或禁止持久连接。
        pgsql.max_persistent=-1;持久连接的最大数,-1代表无限制。
        pgsql.max_links   =-1;连接的最大数目(持久和非持久), -1代表无限制。
        [Sybase]
        sybase.allow_persistent=On;允许或禁止持久连接。
        sybase.max_persistent=-1;持久连接的最大数,-1代表无限制。
        sybase.max_links  =-1;连接的最大数目(持久和非持久), -1代表无限制。
        ; sybase.interface_file = "/usr/sybase/interfaces"
        sybase.min_error_severity=10;显示的错误的最低严重性。
        sybase.min_message_severity=10;显示的消息的最低重要性。
        sybase.compatability_mode = Off
       ;与旧版PHP 3.0兼容的模式,若打开,这将导致PHP自动地把根据结果的Sybase
       ;类型赋予它们,而不是把它们全当成字符串。这个兼容模式不会永远留着。
        [Sybase-CT]
        sybct.allow_persistent=On ;允许或禁止持久连接。
        sybct.max_persistent=-1 ;持久连接的最大数,-1代表无限制。
        sybct.max_links   =-1 ;连接的最大数目(持久和非持久), -1代表无限制。
        sybct.min_server_severity=10;显示的错误的最低严重性。
        sybct.min_client_severity=10;显示的消息的最低重要性。
        [bcmath]
        bcmath.scale=0;用于所有bcmath函数的十进制数数字的个数
        [browscap]
        ; browscap = extra/browscap.ini
        browscap = C:\WIN\SYSTEM\inetsrv\browscap.ini
        [Informix]
        ifx.default_host  =  ; ifx_connect ()默认使用的主机(安全模式下无效)。
        ifx.default_user  =  ; ifx_connect ()默认使用的用户名(安全模式下无效)。
        ifx.default_password  =  ; ifx_connect ()默认使用的密码(安全模式下无效)。
        ifx.allow_persistent  =On;允许或禁止持久连接。
        ifx.max_persistent  =-1;持久连接的最大数,-1代表无限制。
        ifx.max_links   =-1;连接的最大数目(持久和非持久), -1代表无限制。
        ifx.textasvarchar  =0
       ;若打开,select状态符返回一个 "text blob" 字段的内容,而不是它的id。
        ifx.byteasvarchar  =0
       ;若打开,select状态符返回一个 "byte blob" 字段的内容,而不是它的id。
        ifx.charasvarchar  =0
       ;追踪从固定长度的字符列里剥离的空格,可能对Informix SE用户有效。
        ifx.blobinfile   =0
       ;若打开,text和byte blobs的内容被导出到一个文件,而不是保存到内存。
        ifx.nullformat   =0
        ; NULL(空)被作为空字段返回,除非这里被设为1。
       ;若被设置为1, NULL将作为字串NULL返回。
        [Session]
        session.save_handler     =files  ;用于保存/取回数据的控制方式。
        session.save_path = C:\win\temp
       ;在save_handler设为文件时传给控制器的参数,这是数据文件将保存的路径。
        session.use_cookies  =1     ;是否使用cookies。
        session.name      =PHPSESSID  ;用在cookie里的session的名字。
        session.auto_start       =0     ;在请求启动时初始化session。
        session.cookie_lifetime   =0
       ;按秒钟记的cookie的保存时间,若为0时,直到浏览器被重启。
        session.cookie_path      =/      ; cookie的有效路径。
        session.cookie_domain    =        ; cookie的有效域。
        session.serialize_handler=php;用于连接数据的控制器,php是PHP的标准控制器。
        session.gc_probability   =1
       ;按百分比的碎片整理进程,在每次session初始化的时候开始的可能性。
        session.gc_maxlifetime   =1440
       ;在这里数字指的是秒数后,保存的数据将被视为碎片并由gc进程清理掉。
        session.referer_check= ;检查HTTP引用以使额外包含于URLs中的ids无效。
        session.entropy_length   =0     ;从文件中读取的字节数。
        session.entropy_file     =       ;指定这里建立session id。
        ; session.entropy_length   =16
        ; session.entropy_file     =/dev/urandom
        session.cache_limiter    =nocache
       ;设为{nocache, private, public},以决定HTTP的缓存问题。
        session.cache_expire     =180   ;文档在n分钟后过时。
        session.use_trans_sid    =1  ;使用过渡性的sid支持
        url_rewriter.tags        ="a=href, area=href, frame=src, input=src, form=fakeentry"
        [MSSQL]
        ; extension=php_mssql.dll
        mssql.allow_persistent  =On;允许或禁止持久连接。
        mssql.max_persistent  =-1;持久连接的最大数,-1代表无限制。
        mssql.max_links   =-1;连接的最大数目(持久和非持久), -1代表无限制。
        mssql.min_error_severity=10;显示的错误的最低严重性。
        mssql.min_message_severity=10;显示的消息的最低重要性。
        mssql.compatability_mode=Off;与旧版的PHP 3.0兼容的模式。
        [Assertion]
        ; assert.active=On     ;断言(表达式),默认生效。
        ; assert.warning=On    ;为每个失败的断言发出警告。
        ; assert.bail=Off      ;默认不释放。
        ; assert.callback=0    ;如果断言失败,就调用一个用户函数。
        ; assert.quiet_eval   =0
       ;用当前error_reporting ()的返回值来评估表达式,如果想在eval ()前后调用
        ; error_reporting (0),就设置为真。
        [Ingres II]
        ii.allow_persistent   =On;允许或禁止持久连接。
        ii.max_persistent   =-1;持久连接的最大数,-1代表无限制。
        ii.max_links   =  -1;连接的最大数目(持久和非持久), -1代表无限制。
        ii.default_database   = ;默认database(格式为:[node_id::]dbname[/srv_class])。
        ii.default_user   = ;默认user。
        ii.default_password   = ;默认password。
        [Verisign Payflow Pro]
        pfpro.defaulthost   ="test.signio.com";默认的Signio服务器。
        pfpro.defaultport   =443;连接的默认端口。
        pfpro.defaulttimeout  =30;按秒计的默认超时时间。
        ; pfpro.proxyaddress  = ;默认的代理IP地址(如果需要)。
        ; pfpro.proxyport   = ;默认的代理端口。
        ; pfpro.proxylogon   = ;默认的代理登录(logon用户名)。
        ; pfpro.proxypassword  = ;默认的代理密码。
        [Sockets]
        sockets.use_system_read  =On;使用系统的read ()函数替代php_read ()封装。
        ; Local Variables:    (局部变量)
        ; tab-width: 4
        ; End:

要看目前的系统配置,可以运用phpinfo ()来看到。以下为选项配置:

表1-2 phpinfo ()中的系统配置选项作用说明表

续表

续表

表1.3列出了一些与session有关的配置。

表1-3 与session有关的配置

1.5 运行第一个PHP页面

PHP页面是嵌入了PHP命令代码的HTML页面。Web服务器执行PHP命令并将输出HTML文档传送至浏览器,例1.1显示了一个完整的PHP页面。

例1.1: hello.php

        <html>
            <head>
                  <title>第一个PHP程序</title>
            </head>
            <body>
                  <? php
                  echo "hello,这是第一个PHP程序";
                  ?>
            </body>
        </html>

将例1.1的内容保存到文件hello.php中,然后单击浏览器查看,结果显示如图1-35所示。

图1-35 第一个PHP程序

在这个例子中,PHP代码被放在标签<? PHP和?>之间。PHP命令echo将输出字符串 "hello,这是第一个PHP程序”插入到HTML文件中。

在浏览器中,单击右键选择查看源代码,可以查看到如下内容:

    <html>
    <head>
    <title>第一个PHP程序</title>
    </head>
    <body>
    hello,这是第一个PHP程序
    </body>
    </html>