- PHP Web开发快速入门及实例精选
- 陆昌辉等编著
- 10字
- 2020-08-26 18:24:18
第一部分 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>