网站的 PHP 实现技术

218
网网网 PHP 网网网网 PHP 网 网网网网网网网网网网网网网网网 网网网网网网网 一。 ASP 网网 网网网网网 HTML 网网网网网网网网网网网网网网网PHP 网网网网网网 网网网网网网网网网网 HTML 网网 网网 网网网网网网 网网 网网网网网网网网网网网网网网网网网网 ,一。。 PHP 网网网网网网网网网网网网 网网网网 网网网网网网网网网网网 网网网网网网网网网网网 网网网网网网网网网网 。,,。 PHP 网网网网 网网网网网网网网网网网网网网网网网

description

网站的 PHP 实现技术. PHP 是一种服务器端解释执行的脚本语言。如果用户接触过 ASP 的话,那么对于在 HTML 页面中嵌入代码应该是比较熟悉了。 PHP 代码在服务器一端被解释转变成普通的 HTML 页面内容,送给浏览器一端。这种模式可以用来完成相当复杂的功能。 PHP 是编程语言和应用程序服务器的结合。它和其他编程语言类似,使用变量存储临时数值,使用操作符处理变量。 PHP 的真正价值在于它常用于网站的应用程序服务器。. 1 PHP 概述. - PowerPoint PPT Presentation

Transcript of 网站的 PHP 实现技术

Page 1: 网站的 PHP 实现技术

网站的 PHP 实现技术

PHP 是一种服务器端解释执行的脚本语言。如果用户接触过 ASP 的话,那么对于在 HTML 页面中嵌入代码应该是比较熟悉了。 PHP 代码在服务器一端被解释转变成普通的 HTML 页面内容,送给浏览器一端。这种模式可以用来完成相当复杂的功能。 PHP 是编程语言和应用程序服务器的结合。它和其他编程语言类似,使用变量存储临时数值,使用操作符处理变量。 PHP 的真正价值在于它常用于网站的应用程序服务器。

Page 2: 网站的 PHP 实现技术

1 PHP 概述

PHP (原意为 Personal Home Page ),是一种跨平台的服务器端嵌入式脚本技术。 PHP 页面是一种文本文件,是在普通 HTML 页面文件中嵌入 PHP 脚本语句,由服务器解释和翻译成普通的 HTML 文件,然后传送给客户端浏览器,这一点和 ASP 一样。 PHP 是用 C 语言编写而成,可运行于 Unix/Linux 和 Windows 9x/NT 下。

目前最新的版本为 PHP 4.0 ,而常用的版本为 PHP 3.0 。

Page 3: 网站的 PHP 实现技术

1 PHP 概述

PHP 的网上资源如下: ( 1 )官方网站: http://www.PHP.net/ ( 2 )说明手册:可在官方网站上查阅或下载说明文件。或者在

安装完成后,在 PHP 的目录底下的子目录 ../doc 中取得,该手册为 html 格式,可用浏览器直接浏览。

Page 4: 网站的 PHP 实现技术

1.1 网站的 PHP 实现技术的特点

在网站的实现技术方面, PHP 具有四个主要的特点。 1. 快速

PHP 是一种非常强大的 CGI 脚本语言,其语言特点基本上源于 C 语言,实现方式更像 PERL ,而其对数据库的内在支持更使之成为 ASP 的强大对手。同时, PHP 是一种服务器内置式的 Script 语言,语法上混合了 C 、 Java 、 Perl 等语言的、以及 PHP 式的新语法,执行动态网页比 CGI 或者 Perl 更快,这是它的第一个突出的优点。它的出现使得在 Unix 上更快速地开发动态 Web 成为现实。它与 Javascript 等语言的一个区别就是 PHP 是在服务器执行,客户机所看到的是其在服务器上运行的结果。

Page 5: 网站的 PHP 实现技术

1.1 网站的 PHP 实现技术的特点

2. 适合于网络开发领域

对于网络开发领域, PHP 是最合适的。因为 PHP 是被设计用来编写 Web 应用程序的语言,所以对于为它度身量作的任务—Web 站点的开发,无疑最能胜任。按照David Medinets 的说法: PHP 是编程语言和应用程序服务器的结合。 PHP和其他的编程语言类似,使用变量存储临时数值,使用操作符处理变量。 PHP 的真正价值在于它是一个应用程序服务器。所谓的应用程序服务器,是指一个把几项不同的技术组合为一个完整套件的程序。这些技术包括:

Page 6: 网站的 PHP 实现技术

1.1 网站的 PHP 实现技术的特点

( 1 )一个功能强大的编程语言。 ( 2 ) 存取数据库中存储的资料。 ( 3 )支持 Internet协议,尤其是电子邮件和 HTTP协议。

PHP 在 Internet 上,支持了许多的通信协议( Protoco1 ),包括了与电子邮件相关的 IMAP 、 POP3 、网管系统 SNMP 、网络新闻 NNTP 、账号共享 NIS 、全球网 HTTP 及 Apache服务器、目录协定 LDAP 以及其他网络的相关函数。

Page 7: 网站的 PHP 实现技术

1.1 网站的 PHP 实现技术的特点

3. 跨平台PHP 具有在不同操作平台下适用的版本,也提供源代码版本。PHP 可支持多种主流与 非主流数据库,包括常用的 DBA 、dbase 、 dbm 、 filePro 、 Informix 、 InterBase 、 mSQL 、Microsoft SQL Server 、 MySQL 、 Solid 、 Sybase 、 ODBC 、 Oracle 8、 Oracle 、 Postgre SQL 等。用 PHP 写出来的 Web 后端 CGI 代码,可以很轻易地移植到不同的平台上。例如,用 Linux架构的网站,在系统负荷过高时,可以快速地将整个系统移到 SUN工作站上,不用重新编译 CGI 程序。面对快速发展的 Internet ,这是长期规划的最好选择。

Page 8: 网站的 PHP 实现技术

1.1 网站的 PHP 实现技术的特点

4. 功能全面PHP 的功能非常全面,包括英文拼写检查、 BC高精确度计算、西洋历法、 PDF文件格式、 Hyperwave 服务器、图形处理、编码与解码功能、杂凑处理、 WDDX功能、 qmail系统、压缩文件处理、 XML 解析,除此之外,对于一般语言有的数学运算、时间处理、文件系统、字符串处理、行程处理等功能,它也同样擅长。PHP 支持 HTTP 的身份认证、 Cookie 、 GIF 图像创建,其最有代表性的特点是它的数据库层,这使得编写基于数据库的网页变得非常简单。PHP也支持 POP3 、 HTTP 、 SNMP 、 NNTP 、 IMAP 等协议,并可采用它们的服务进行网络编程。

Page 9: 网站的 PHP 实现技术

1.2 PHP 运行环境 PHP 具有跨平台特性,可以与多种数据库连接,其中: Linux+Apache+MySQL 是它的最佳组合,效率也是最高的。

1.MySQLMySQL 是一个小巧灵珑的数据库服务器软件,对于小型系统是非常理想的。除了支持标准的 ANSI SQL 语句,它还支持多种平台,而且在 Unix系统上该软件支持多线程运行方式,因此性能相当好,所以它与类 Unix 的 Linux配合十分默契。而对于不使用 Unix/Linux 的用户,它可以在 Windows NT/2000系统上以系统服务方式运行,或者在 Windows 9x系统上以普通进程方式运行。MySQL 的组合可以跨平台运行,这就意味着可以在 Windows 上开发,然后在 Unix/Linux 平台上运行。另外, PHP也能作为标准的 CGI进程来运行,此时它是一个独立的脚本解释器,或者是 Apache 的一个嵌入模块。

Page 10: 网站的 PHP 实现技术

1.2 PHP 运行环境

2.LinuxLinux 是一套免费使用和自由传播的类 Unix 操作系统, Linux 以它的高效性和灵活性著称。它能够在 PC计算机上实现 Unix 特性,具有多任务、多用户的能力。 Linux 最大的特点在于它是 GNU ( Gnu's Not Unix )的一员,遵循公共版权许可证( GPL ),秉承“自由的思想,开放的源码”的原则,对计算机爱好者完全开放的操作系统。选择 Linux 有如下几个优点:

( 1 ) Linux 是“免费”的,包括其附带的的“免费”软件,可以极大 地降低总成本( TCO)。

( 2 ) Linux 比较稳定而且性能相当地好。

Page 11: 网站的 PHP 实现技术

1.2 PHP 运行环境

( 3 ) Oracle 、 Infomix 、 Sysbase 、 IBM 等许多公司都支持Linux ,用它来做数据库平台也非常好。

( 4 ) Linux 本身就是通过网络来协同开发的,所以非常适合 Internet/Intranet 。

( 5)开放的源代码特性使得用户可以根据自己的要求来添加或删除某些功能,其可定制性极为方便。

Page 12: 网站的 PHP 实现技术

1.2 PHP 运行环境

3.Apache

Apache 是基于 UNIX平台的,它功能强大,安全系数高,而且十分稳定。 Apache 是目前用来当“虚拟主机”的最热门的后台软件。所谓的“虚拟主机”主要是指“虚拟网络服务”,通过它与真实的服务器配合就可以完成整个服务。

Page 13: 网站的 PHP 实现技术

1.2 PHP 运行环境

Apache 服务器的设计不但与 NCSA httpd 1.3 相容,并且提供了以下功能:

( 1 )作为身份验证之用的 DBM 资料库。 ( 2 )自定的( Customised )错误与问题回应方式。 ( 3 )多重的 directoryIndex指令。 ( 4 )不限次数的 Alias 以及 Redirect指令。 ( 5)以内容为基础的文件协商。 ( 6)虚拟服务器。

Page 14: 网站的 PHP 实现技术

1.2 PHP 运行环境

4.PHP 的最佳组合及运行环境用户一般可以选用以下环境:

( 1 )服务器端运行平台: Linux ( 2 )后台 Web 服务器: Apache ( 3 )数据库: MySQL ( 4 )客户端运行平台: Windows 9x 、 Windows NT 或者 Wi

ndows 2000 ( 5)支持软件: IE 浏览器( 4.0 以上)或其它兼容的浏览器 ( 6)编程软件: Dreamweaver 、 Flash 、 FrontPage 等。

Page 15: 网站的 PHP 实现技术

1.2 PHP 运行环境

利用 Apache+MySQL+Linux+PHP 就可以建立起网站并提供网络服务了。关于 Apache 、 MySQL 与 Linux 其他信息请参考相关书籍。

Page 16: 网站的 PHP 实现技术

1.3 PHP访问数据库的机制

PHP访问数据库的工作过程如下: ( 1 )客户在浏览器地址栏目输入要访问的 PHP 页面的 URL ,

发出一个 PHP请求。 ( 2 ) Web 服务器接受该请求,根据扩展名 .php识别出 PHP

文件,并找出相应的 PHP 文件。 ( 3 ) Web 服务器把 PHP 文件发送到 PHP引擎。 ( 4 ) PHP引擎将 PHP 文件从头至尾进行扫描,根据命令连接

后台数据库。 ( 5)数据库管理系统对数据库进行操作,并将用户请求数据

通过数据库管理系统上传到 PHP引擎。

Page 17: 网站的 PHP 实现技术

1.4 PHP 与其它的网站实现技术的比较

网站实现技术有很多种,而 PHP只是其中的一种。下面对目前流行的三种网站实现技术 ASP 、 PHP 与 JSP 技术进行比较。

Page 18: 网站的 PHP 实现技术

1.4 PHP 与其它的网站实现技术的比较

其中, JSP ( Java Server Pages )是一种崭新的动态网页制作技术,它具有跨平台与跨网络服务器支持,以 Java 为主的技术来产生动态网页。 JSP 与 Microsoft 的 ASP兼容,但它是使用类似 HTML 的卷标以及 Java 程序代码片段而不是 VBScript 。当用户使用 Apache 或 Netscape 服务器时,并不能提供 ASP支持,这时可以考虑 JSP 。虽然也可以取得这些服务器的 ASP附加配备模块,但价格相当昂贵,目前 Sun并没有对 JSP组件收取费用。同时对于 Solaris 与 Linux 以及 Windows ,这些组件也都很容易取得。但请不要将 JSP 与服务器端的 JavaScript混在一起。网络服务器会将用 JSP 写成的 Java 程序代码片段自动转换成 Java servlets 。而先前许多必须以 Perl 手写的程序或服务器特定的 API (如 ASP )控制的功能也都可通过 JSP 来自动化处理

Page 19: 网站的 PHP 实现技术

1.4 PHP 与其它的网站实现技术的比较

ASP 、 PHP 与 JSP 技术的平台性能比较见表 9-l 。

Page 20: 网站的 PHP 实现技术

2 PHP 的功能特点

PHP 是最流行的 Web 脚本语言之一,它运行在 Web 服务器端,根据用户请求或服务器端的数据产生动态网页。它功能强大,和 HTML 脚本融合在一起,并具有内建访问数据库的能力。它能够作为 Apache Web 服务器的模块执行,也使得它的执行效率要高于普通的 CGI 程序。

Page 21: 网站的 PHP 实现技术

2.1 PHP 的 HTTP认证功能

HTTP认证功能仅当 PHP 作为 Apache 的模块运行时才可用。在一个 Apache 的 PHP 解析模块中,可以使用 Header()函数发送一个“请进行身份验证”的消息到客户端的浏览器上,这将在客户端弹出一个要求输入用户名和密码的窗口。当用户填入了用户名和密码后,包含该段 PHP 程序的网页会再次被调用,有三个变量被传入程序, SPHP_AUTH_USER 、 SPHP_AUTH_PW 和 SPHP_AUTH_TYPE分别代表用户名、密码和认证类型。(此功能只支持基本身份验证)。

Page 22: 网站的 PHP 实现技术

2.1 PHP 的 HTTP认证功能下面是一段 HTTP认证的程序:

<?If(!isset($PHP_AUTH_USER)){Header ("WWW-Authenticate:Basic realm=\"My Realm

\"");Header("HTTP/1.0401 Unauthorized");echo "Text to send if user hits Cancel button\n";exit;} else

Page 23: 网站的 PHP 实现技术

2.1 PHP 的 HTTP认证功能

{if (!($PHP_AUTH_USER= "tnc"&&$PHP_AUTH_PW = "natur

e")){// 如果是错误的用户名称 / 密码对,强制再验证Header("WWW-Authenticate:Basic realm=\"My Realm

\"");Header(“HTTP/1.0401Unauthorized”);Echo "ERROR:$PHP_AUTH_USER/$PHP_AUTH_PW is invali

d.";exit;}

Page 24: 网站的 PHP 实现技术

2.1 PHP 的 HTTP认证功能

else

{

echo "Welcome tnc!";

}

}

?>

Page 25: 网站的 PHP 实现技术

2.1 PHP 的 HTTP认证功能

以上的例子通过用户名称 /密码对 tnc/nature 来验证一名用户的登录,事实上在实际应用中不大可能如上面那样,使用代码段明显的用户名称 /密码对,而是利用数据库或者加密的密码文件来存取它们。

但是要注意,以上方法不能阻止某些人使用在该服务器上已经获得认证的 URL 来窃取密码,从而对非授权 URL进行控制的情况。

Page 26: 网站的 PHP 实现技术

2.2 使用 PHP生成动态的 GIF 图像

PHP不但可以输出 HTML ,也可以方便地生成动态的 GIF 图像文件,甚至 GIF格式的图像流。为此要将 PHP 和提供图像函数 GDlibrary一起编译。下面是用 PHP创建 GIF动画的示例程序。

<?

Header("Content-type:image/gif");

$string=implode($argv,"");

$im=imagecreatefromgif("images/buttonl.gift");

$orange=ImageColorAllocate($im,220,210,60);

Page 27: 网站的 PHP 实现技术

2.2 使用 PHP生成动态的 GIF 图像

px=(imagesx($im)-7.5*strlen($string))/2;

ImageString($im,3,$px,9,$string,$orange);

ImageGif($im);

ImageDestroy($im);

?>

这个文件可以通过网页中类似 <img src= “button.php3? text”>的语句来调用。上面这段程序 button.php3 取出字符串“ text”并且把它写到背景图上(本例中是“ images/buttonl.gif”),然后输出所得到的图像。这样就可以很方便地制作文字不同而样式相同的按钮,而不必去一一重画了。在程序中它们将被动态地生成。

Page 28: 网站的 PHP 实现技术

2.3 文件上传支持

利用 PHP 用户能够从任何兼容 RFC-1867标准的浏览器上传文件。这个功能使用户既可以上传文本文件也可以上传二进制文件。结合 PHP 的认证和逻辑函数,能够完全控制谁可以上传文件,和文件上传后可以干什么。要实现文件上传,需要建立一个特殊的 FORM ,请看下面的例子:

<FORMENCTYPE= "multipart/form-data" ACTION="_URL_" METHOD=POST>

<INPUT TYPE= "hidden" name= "MAX_FILE_SIZE" value= "1000">

Page 29: 网站的 PHP 实现技术

2.3 文件上传支持

Send this file:<INPUTNAME= "userfile" TYPE= "file">

<INPUT TYPE= "submit" VALUE= "Send File">

</FORM>

其中的 URL 是一个用于响应的 PHP 文件,隐藏的 MAX FILE-SIZE参数必须写在输入文件字段之前,它指明了可以上传的文件的最大字节数。上载传输成功后,下面的变量将被定义:

Page 30: 网站的 PHP 实现技术

2.3 文件上传支持

①$userfile :用户上传到服务器上的文件临时存放的名称。 ②$userfile_name :在用户机器上该文件的原始名称。 ③$userfile_size :上传文件的实际字节数。 ④$userfile_type :如果用户的浏览器提供了这个信息的话,它表示MIME 的类型。例如“ image/gif”。

Page 31: 网站的 PHP 实现技术

2.3 文件上传支持

“$userfile” 这个变量是上面表单中 TYPE=file 的字段的名字,在例中称为“ userfile” 。文件被存储在服务器上默认的临时目录下。用户可通过手工设置 PHP 运行的环境变量中的 TMPDIR 来进行设置。该变量不能通过程序中的 PutEnv()函数设置。表单中指定的 PHP 程序,可以控制上传了的文件用来干什么。比如,可以使用 Stlle_size 变量来决定抛弃那些太大或太小的文件;可以通过比较 Sille_type 变量剔除类型不匹配的文件。总之,用户可以决定是把那个文件从临时目录里删除还是移到别的地方去。另外,有一个问题值得注意, CERN 的 httpd 服务器可能删掉 content-type 中 MIME 数据头后第一个空白开始的所有数据,因此, CERN 的 httpd 服务器不支持文件上传。

Page 32: 网站的 PHP 实现技术

2.4 HTTP Cookie 的支持

PHP 支持基于 HTTP 的 Cookies 。在需要时可以像使用一般变量一样方便地使用 Cookie 。 Cookies 是浏览器保存于客户端的一些信息片段,由此可以知道某一台某特定 PC 上的人是否访问过用户的站点及浏览者在网站上的踪迹等。使用 Cookies 的典型例子就是对浏览者偏好的辨别。 Cookies 由函数setcookie()设定。与输出 HTTP标头的函数 header()一样,setcookie() 必须在任何实际内容输出到浏览器之前调用。以下是一个简单例子:

Page 33: 网站的 PHP 实现技术

2.4 HTTP Cookie 的支持

<?

if(empty($VisitedBefore))

{

// 如果没有设定 cookie ,为 cookie 赋上当前时间值// 函数中的最后一个参数声明了该 cookie 保存的时间// 在这个例子中是 1 年//time() 函数返回自 1970 年 1 月 1 日以来的以秒数计的时间SetCookie("VisitedBefore", time()+ (60*60*24*36

5));

}

Page 34: 网站的 PHP 实现技术

2.4 HTTP Cookie 的支持

else

{

// 欢迎浏览者再次光临echo "Hello there, welcome back <BR>";

// 读取 cookie 并判断

if((time()-$VisitedBefore)>= "(60*60*24*7)")

echo "Why did you take a week to come back.You should be here more oftett?";

}

?>

Page 35: 网站的 PHP 实现技术

2.5 PHP 4.0 的功能新特性

比较来说 PHP 4.0 是更有效的,更可靠的动态 Web 页开发工具,在大多数情况运行比 PHP 3.0 快,其脚本描述更强大并且更复杂,最显著的特征是速率比的增加。 PHP 4.0 这些优异的性能是 PHP 脚本引擎重新设计产生的结果:引擎由 AndiGutmans 和 ZeevSuraski从底层全面重写。 PHP 4.0 脚本引擎——Zend引擎使用了一种更有效的“编译—执行”范式,而不是 PHP 3.0采用的“执行—当解析时”模型。 PHP 4.0 在 3.0 版的基础上增加或增强了许多有用的特性,主要列举如下:

Page 36: 网站的 PHP 实现技术

2.5 PHP 4.0 的功能新特性

别名:在 PHP 4.0 中,可以利用引用为变量赋值,这给编程带来了很大的灵活性。

( 1 )扩充了 API 模块: PHP 4.0 为 API 模块提供了扩展 PHP 接口模块,它比旧 API 版本显著地加快。 PHP 模块已有的及最常用的接 口多数被转换为使用这个扩展的接口。

( 2 )自动资源释放: PHP 4.0增加了引用计数功能,这种新技术的引入使 PHP 4.0 具有了自动管理内存功能,减轻了开发人员的负担。

( 3 )布尔类型: PHP 4.0 支持布尔类型。 ( 4 )进程生成:在 UNIX 环境下的 PHP 4.0提供了一个很智能

和通用的生成进程,使用了一种基于 automake/1ibtool 的系统生成技术。

Page 37: 网站的 PHP 实现技术

2.5 PHP 4.0 的功能新特性

( 5) COM/DCOM 支持: PHP 4.0提供 COM/DCOM 支持(仅用于 Windows环境)可以无缝地存取和访问 COM 对象。

( 6)与 PHP3.0 有很好的兼容性: PHP 4.0 与 PHP 3.0 代码向后兼容性接近 100%。

( 7)配置: PHP 4.0重新设计和增强了 php.ini 文件,这使得用 php.ini 来配置 PHP显得极为容易,全部文件能被 Apache 在运行时间操作(在 Apache环境下)或由 Windows注册表(在 Windows 下面)操作。被加入 php.ini 文件的配置指令自动地在所有相关的模块中被支持。

( 8)加密支持: PHP 4.0 实现了完整的加密,这些加密功能是一个完整的 mycrypt 库, 并且 PHP 4.0 支持哈希函数、 Blowfish 、Triple DES 、 MD5,而且 SHAl也是可使用的一些加密算法。

Page 38: 网站的 PHP 实现技术

2.5 PHP 4.0 的功能新特性 ( 9 )类型检查: PHP 4.0 支持同一操作符用于类型检查:“ = = =” ( 3 等号运算符),为在两个值和其类型之间作检查。例如,“ 3”= = =3将视为假(类型是不同的),而“ 3”= = 3 (相等判断)将视为真。

( 10 ) FTP 支持: PHP 4.0 支持 FTP 。通常,用户会为通过调制解调器连接下载一个大文件提供一个网接口。此时如果需要,可以用 PHP 。

( 11 ) PHP 4.0 新增函数或功能增强函数: PHP 4.0 新增了许多函数,同时也将许多现有 的函数功能进行了增强,例如, array count_values()、 eval()、 foreach()、 nclude()、 ob_end_clean()、 ob_end_flush0 、 ob_get_contents()、 ob_start()、 strip_tags()、 unset()。

Page 39: 网站的 PHP 实现技术

2.5 PHP 4.0 的功能新特性

( 12 ) HTTP Session fallback系统:为 HTTP Session管理的一个 fallback 系统在 PHP 4.0 被实现。默认情况下, Session标识符由 Cookies 存储。如果没有 Cookies 支持或一项 Cookies任务失败, Session标识符自动被创建并在 URL 的查询字符串中被携带。

( 13 ) ISAPl 支持: PHP 4.0 能作为一个个性化的 ISAPI 模块而成为 IIS插件。这比 PHP 3.0 作为 CGI 运行(一个外部的程序)更为有效。

( 14 )内存使用: PHP 4.0 能更有效地使用内存,较少的内存占用和消耗,这主要归功 于引用计数技术的实现。

( 15)其他类成员函数:在 PHP 4.0 中能在成员函数本身的作用域或全局范围内调用其 他类的成员函数。例如,用一个子函数覆盖父函数,并在子函数中调用父函数。

Page 40: 网站的 PHP 实现技术

2.5 PHP 4.0 的功能新特性

( 16)多维数组:在 PHP 4.0 中,利用 GET 、 POST 、 Cookies进行的数据传输支持多维数组。

( 17)个性化的 HTTP Session 支持: HTTP Session 处理,包括fallback 系统管理,在 PHP 4.0 中被它的新库函数实现。在 PHP3.0 中处理 Session 要求使用 PHPLIB和第三方的 库函数,这比把 Session 直接由 PHP 支持慢了许多。

( 18)个性化的 Java 支持: PHP4.0 支持与 Java 的交互。这种个性化的 Java 支持为 PHP 在 Java 对象上创建和使用方法提供一个简单并且有效的工具。

( 19 )对象和嵌套数组: PHP 4.0 实现了功能更加强大的对象,移去了 PHP 3.0 中存在的句法限制。对象能在数组内嵌套,同样数组也能在对象内嵌套,可以根据你的需要实现。

Page 41: 网站的 PHP 实现技术

2.5 PHP 4.0 的功能新特性

( 20 )面向对象的编程: PHP 4.0 为面向对象的编程和构造类及对象提供扩展的功能和新特征。

( 21 )对象重载支持:对象重载语法允许第三方的基于面向对象的类库使用 PHP 4.0 的 面向对象的特征存取它们自身的功能。使用这个特征的一个 COM 模块已经被实现了。

( 22 )输出缓冲支持: PHP提供了一个输出缓冲函数集合。在 PHP4.0 中的输出缓冲支持并允许 HTML头信息存放,无论 HTML的正文是否已经输出。头信息( heade(), content type , and Cookies )不采用缓冲。

( 23 )增加了 PCRE 库: PHP 4.0包括一个 Perl兼容的正则表达式( PCRE )库,和正常 regex 库一起与 PHP绑定。 Split 和 Replace PCRE 功能被支持。 PCRE 和 Perl 正则表达式之间有一些细微差别。

Page 42: 网站的 PHP 实现技术

2.5 PHP 4.0 的功能新特性

( 24 ) php.ini 文件: php.ini 文件在 PHP 4.0 中被重新设计,使用的 PHP 的配置 php.ini 是更容易并且更有效的。全部文件能被Apache 在运行时间操作(在 Apache环境下)或由 Windows注册表(在 Windows )操作。被加入 php.ini 文件的配置指令自动地在所有相关的模块中被支持。

( 25)引用计数: PHP 4.0 为系统中的每个数值包括资源提供了引用计数,一旦一个资源不再被任何变量引用,它自动地被释放以节省内存资源。利用这个特征的最明显的例子是一个内置 SQL查询的循环语句。在 PHP 3.0 中,每次递归另外的 SQL 结果集合重复申请内存,直到脚本执行完毕,这些结果集合占用的内存才被释放。

( 26)支持引用:通过引用可以改变一个变量的值。

Page 43: 网站的 PHP 实现技术

2.5 PHP 4.0 的功能新特性

( 27)函数运行时的绑定: PHP 4.0 的运行时间绑定功能允许你在它们被声明以前调用,无论声明是否在代码以后或是在运行期间。

( 28)类的运行时信息: PHP 4.0 支持在运行时刻存取下列类信息:一个对象的类名, 一个对象的父类的类名字,以及对象函数所在的名字。

( 29 )服务器抽象层:为支持 Web 服务器提供了增强型 SAPI(服务器 API )接口,是 PHP 4.0不可分的一部分。这个服务器抽象层,提供了通用的 Web 服务器接口支持,支持 多线程Web 服务器,为大多数的 Web 服务器提供透明的支持,这些服务器包括 Apache 、 IIS ( ISAPI ),以及 AOL 服务器。

Page 44: 网站的 PHP 实现技术

2.5 PHP 4.0 的功能新特性

( 30 )语法的点亮显示: PHP 4.0 语法的点亮显示允许开发者看见源代码而不是脚本,这个功能比 PHP 3.0 中的更有效。它跑得更快,执行得更好,并且产生更紧凑的 HTML 代码。

( 31 )由引用改变变量的值: PHP 4.0 由引用支持可变的赋值,“关联”的两个变量之中的任何一个的值被改变,另外的变量的值同样被改变,这类似于 C 中的指针类型。

( 32 )在引用字符串中的变量引用: PHP 4.0增强了在引用字符串中的变量引用。例如, print “${a[0]>bingo}”,这个例子在PHP 3.0 中是不可能做到的,但在 PHP 4.0 中却可以。

Page 45: 网站的 PHP 实现技术

3 PHP 的安装

3.1 Windows 2000+Apache 下安装配置 PHP 4.0

安装环境及所需软件: 操作系统: Windows2000 Professional简体中文版 数据库: MySQL Shareware 3.22.34 for WIN32 PHP4.0 : PHP4.0.1 for WIN32 服务器: Apache 1.3.12 for WIN32 数据库管理工具: phpmyadmin 2.10

Page 46: 网站的 PHP 实现技术

3.1 Windows 2000+Apache 下安装配置 PHP 4.0

第一步: Apache 的安装 ①运行 Apache_1_3_12_win32.exe ,按照提示安装,安装目录不妨为: C:\apache 。

② 修改 C:\apache\httpd.conf,去掉 ServerName 前的“ #”号,后面跟本机的 IP 地址。

③ 运行 C:\apache\apache -i ,将 Apache 安装成为 Windows 2000 的一个服务。

④ 运行 net start apache启动 Apache 。 ⑤ 将 C:\apache\htdocs\index.html.en改名为 index.html 。

Page 47: 网站的 PHP 实现技术

3.1 Windows 2000+Apache 下安装配置 PHP 4.0

第二步:测试 Apache在浏览器地址栏中输入 :http://localhost ,看一下该 web 服务器运行的效果。

第三步: MySQL 快速安装 ①将mysql-shareware-3.22.34-win.zIP 解压缩到一个临时目录

下,然后运行 setup.exe ,使用默认值进行安装。 ② 运行 C:\mysql\bin\nysqld-shareware-install ,将mysql 安

装成 Windows 2000 的一个服务。 ③ 运行 net start mysql命令或到“设置 - 控制面板 -管理工具 -

服务”中启动 mysql 服务。

Page 48: 网站的 PHP 实现技术

3.1 Windows 2000+Apache 下安装配置 PHP 4.0

第四步:测试MySQL在命令提示下,进入 C:\mysql\bin\的目录,运行 mysqlshow命令,如果没问题的话,应该能看见mysql 中的两个数据库 test 和 mysql 。

第五步: PHP4.0 快速安装 ①将 php-4.0.1-Win32.ZIP 解压缩到一个目录下,例如 C:\HP4.0 。 ② 将 C:\apache\php\php.ini-dist拷贝到 C:\winnt 目录下,并改名为 php.ini 。

③ 将 C:\apache\php\PHP4.0ts.dll拷贝到 C:\winnt\system32目录下。

④ 修改 C:\apache\conf\httpd.conf,在 AddType application/x-httpd-php3-source.phps 这行下方加入如下几行:

Page 49: 网站的 PHP 实现技术

3.1 Windows 2000+Apache 下安装配置 PHP 4.0

ScrlPtAlias/PHP4.0/ “C:/PHP4.0/' ,Addtype application/x-httpd-php.php

Action application/x-httpd-php “/PHP4.0/php.exe”

⑤ 重新启动 Apache ,既可以用 net stop apache 、 net start ap

ache命令,也可以到“设置 - 控制面板 -管理工具 -服务”处启动。

Page 50: 网站的 PHP 实现技术

3.1 Windows 2000+Apache 下安装配置 PHP 4.0

第六步:测试 PHP4.0 。创建一个文件 C:\apache\htdocs\info.php ,其内容如下:

<?phpinfo() ; ?>

然后在浏览器地址栏中输入: http: //localhost/info.php ,即可测试。

第七步:安装 PhpMyAdmin 。如果完全按照以上步骤进行,就可得到 Apache+MySQL+PHP4.0 的运行环境了。事实上,以上方法在 Windows NT4.0中一样可行。

Page 51: 网站的 PHP 实现技术

3.2 Windows 2000+ IIS5下安装配置 PHP 4.0

安装环境及所需软件: 操作系统: Windows 2000 Professional简体中文版 数据库: MySQL Shareware 3.22.34 for WIN32 PHP4.0 : PHP4.0.1 for WIN32 服务器: IIS5

在安装 PHP4.0 之前,首先确认已经安装了 IIS5。由于 Windows 2000 Professional默认 安装时没有 IIS ,所以需要用户自己手动安装。其实安装 IIS 很简单,在“开始”菜单中选择“设置控制面板”,再选中“添加 /删除程序”。这时在“添加 /删除程序”的左边选择“添加 /删除 windows组件”。准备好Windows2000 安装盘,然后按照提示步骤完成 IIS 的安装。

Page 52: 网站的 PHP 实现技术

3.2 Windows 2000+ IIS5下安装配置 PHP 4.0

其次,若需要的是安装 PHP4.0 的源文件,可以从 www.php.net 下载最新的 PHP 4.0 for win 32 的源文件,通常这个文件都是压缩格式。这里用的是 2000-6-28的版本 PHP4.0.1-win 32.Zip 。其安装步骤介绍如下:

第一步:解开 PHP4.0.1-Win32.ZIP压缩包,把它放在 C:\PHP4.0 下面。

第二步:把 CSPHP4.0 下面的 php.ini-dist 文件复制到 WINNT目录下,并改名为 php.ini 。不需要修改任何参数就可以运行,当然以后如果对 PHP4.0 有了更多的了解的话, 可以根据不同情况自行修改某些参数。

第三步:把 C:\SPHP4.0\PHP4.0ts.dll 复制到 C:\WINNT\system32 目录下。

Page 53: 网站的 PHP 实现技术

3.2 Windows 2000+ IIS5下安装配置 PHP 4.0

第四步:双击 IIS ,打开窗口后,右击“默认 Web 站点”,单击属性栏,弹出 Web属性对话框。

第五步:在“默认 Web 站点属性”窗口上单击“ ISAPI筛选器”标签,单击“添加”按钮,在弹出的“筛选器属性”选项卡的“筛选器名称”输入项中输入“ PHP” ,“可执行文件”输入项中输入 C:\PHP4.0\PHP4.0isapi.dll ,单击“确定”按钮。

第六步:在“默认Web 站点属性”窗口上单击“主目录”标签,单击“配置”按钮,在弹出的“应用程序配置”窗口中单击“添加”按钮,在弹出的“添加 / 编辑应用程序扩展名映像”对话框中的“可执行文件”文本框中输入“ C:\PHP4.0\PHP4.0isapi.dll”,“扩展名”文本框中输入“ .php”( 注意一定要有其中的圆点 ),单击“确定”按钮。

Page 54: 网站的 PHP 实现技术

3.2 Windows 2000+ IIS5下安装配置 PHP 4.0

重复第六步的操作,在“扩展名”文本框中输入“ .php” ,单击“确定”按钮。

第七步:在“默认Web 站点属性”窗口上单击“主目录”标签,在本地路径文本框中选择一个 Web 站点的主目录,在该路径存放脚本文件,如 .asp 、 .php 、 .htm .html 等文件。

第八步:回到 IIS 主窗口,停止默认 Web 站点,然后再重新启动。

第九步:在“默认Web 站点属性”窗口上单击“ ISAPI筛选器”标签,单击筛选器名称为 php 的 isapi筛选器的状态,如果状态信息栏为:已装载,则表明已经可以运行了,如果状态信息栏为:未装载,则将计算机重新启动。

Page 55: 网站的 PHP 实现技术

3.2 Windows 2000+ IIS5下安装配置 PHP 4.0

配置到此已经结束了,下面写一个 PHP 程序,检验一下是否配置成功 !编写一个文本 文件,文件名为 hello.php ,其内容为:

<?

Echo "Hello,World";

?>

Page 56: 网站的 PHP 实现技术

3.2 Windows 2000+ IIS5下安装配置 PHP 4.0

把这个文件保存在 Web节点的默认文件目录下 (在 IIS 的“默认Web 站点属性”窗口 中的“主目录”标签中已经设置过 ),然后打开浏览器,如果没有为默认Web 站点分配 IP地址,则在地址栏中输入 localhost/hello.php ,如果顺利,经典的“ Hello , World!”应该出现在你的浏览器中。如果找不到页面,就应该重新检查一下,以确认上述几步有没有问题,如果没问题,那么在浏览器的地址栏中输入地址“ 127.0.0.1/hello.php”,如果能显示页面,则说明 hosts 文件有问题,请编辑“ C:\ WINNT\system32\divers\etc”路径下的 hosts 文件,加入“ 127.0.0.1 localhost”一行。如果已经为默认Web 站点分配 IP 地址,则在地址栏中输入“ IP 地址 /hello.php”。

Page 57: 网站的 PHP 实现技术

3.3 Linux+ Apache 下安装配置 PHP 4.0

本节主要介绍 php4.03 及 MySQL 3.23.9 在 RedHat 6.0系统Apache 1.3.11 下的安装。

1. 所需软件 ( 1 ) PHP 4.03 源程序 C 语言代码 MySQL 3.23 alpha 源程序 Apache l.3.11 源程序 PhpMyAdmin_2.1.0管理 MySQL 数据库的最佳工具

Page 58: 网站的 PHP 实现技术

3.3 Linux+ Apache 下安装配置 PHP 4.0

2. 安装步骤其安装步骤介绍如下:

第一步:下载所需程序,安装 MySQL 3.23 程序。 su 为 root 新建的程序安装的目录,如 /server ,在 server 下建

目 录 mysql 和 apache ,将上面 3 个文件下载到 /usr/src/ 下。运行如下 指令解开文件包:

tar –zxvf php-4.0b3.tar,gz

tar –zxvf mysql-3.23.9-alpha.tar.gz

tar –zxvf apachel.3.11.tar.gz

Page 59: 网站的 PHP 实现技术

3.3 Linux+ Apache 下安装配置 PHP 4.0

将 phpmyadmin 下载到 /server 下,然后同样运行上述指令将 tar-zxvf phpMy Admin_2.1.0.tar.gz和 cd/usr/src/mysql-XXXX解开,这里 XXXX是指该软件程序的版本号,系统必须已安装了 C 开发库。接着执行下面的指令:

./configure-help

./configure-prefix=/server/mysql

make

make install

cd /server/mysql/bin

./mysql_install_db

Page 60: 网站的 PHP 实现技术

3.3 Linux+ Apache 下安装配置 PHP 4.0

到这里 MySQL已安装成功,这时就可以运行 MySQL 数据库了,用下面的命令来实现:

/server/mysql/libexec/mysqld &

可以通过数据库查看程序 MySQLshow 来查看数据库当前的状态:

/server/mysql/bin/mysqlshow &

第二步:安装 Apache 、 PHP4.0 以及 PhpMyAdmin 。

Page 61: 网站的 PHP 实现技术

3.3 Linux+ Apache 下安装配置 PHP 4.0

如果系统中已有 Apache 运行,请先关闭此服务: killall httpd

编译 Apache 及 PHP4.0 ,每一个行号为一行: Cd /usr/src/apache_1.3.x

./configure--prefix=/server/apache

cd ../php-4.0.x

./configure --with-mysql=/server/mysql --with- apache=../apache_1.3.x --enable-track-vats

Page 62: 网站的 PHP 实现技术

3.3 Linux+ Apache 下安装配置 PHP 4.0

makemake installcd../apache_1.3.x./configure --prefix=/server/apache --activate-mo

dule=src/modules/PHP4.0/libPHP4.0.amakemake installcd ../php-4.0.xcp php.lini-dist/usr/local/lib/php.ini

Apache 及 PHP4.0已安装成功,下面来看一下 Apache 及 PHP4.0配置。

Page 63: 网站的 PHP 实现技术

3.3 Linux+ Apache 下安装配置 PHP 4.0

3. 配置 PHP 4.0PHP4.0 的配置文件为 /usr/local/lib/php.ini 文件,可以用 Vi 来编辑,如果你安装了 MC也可以用 MC 来编辑,在 [mysql]下修改。

mysql.default_port=3306

mysql.default_host=localhost

mysql.default_user=root

保存文件。

Page 64: 网站的 PHP 实现技术

3.3 Linux+ Apache 下安装配置 PHP 4.0

4. 配置 ApacheApache 的配置文件为 /server/apache/conf/httpd.conf。去掉 #AddType application/x-httpd-php.php 行 的注册号 “ #” 加入 行 AddType application/x-httpd-php.php3 保存文件。

配置 PhpMyAdmin_2.1.0 :在 /server/phpmyadmin_2.1.0 下找到 config.inc.php 文件从第 10 行起修改如下:,

$cfSServers[1]['host'] 'localhost';

$cfgServers[1]['porf']= '3306';

$cfgServers[1]['adv_auth']=false;

Page 65: 网站的 PHP 实现技术

3.3 Linux+ Apache 下安装配置 PHP 4.0

$cfgServers[1]['stduser']='roof;

$cfgServers[1]['stdpass']=' ';

$cfgServers[1]['user']= 'root';

$cfSServers[1][ 'password']=' ';

$cfgServers[1][ 'only_db']=' ';

$cfgServers[1][ 'verbose']=' ';

Page 66: 网站的 PHP 实现技术

3.3 Linux+ Apache 下安装配置 PHP 4.0

修改 config.inc.php 文件第 65行 require( “english.inc.php”)为 require( “chinese_ gb.inc.php”) ;然后保存此文件。启动 Apache :

/server/apache/bin/apachectl stant

第三步:软件测试。 /server/apache/htdocs/ 下链接目录 /server/phpMyAdmin_2.

1.0 为 admin 。在浏览器中打开 http: //localhost/admin/index.php3 。这时应该能连接到 MySQL 的数据库中,可以对数据库进行操作。这表明整个系统已能正常工作。也可以新建立一个 php文件如下:

Page 67: 网站的 PHP 实现技术

3.3 Linux+ Apache 下安装配置 PHP 4.0

文件名为 info.php ,源程序如下: // 查看系统状况 文件开始 <?

Phpinfo();

?>

// 文件结束浏览器中访问此页时,如果不出意外的话,你将得到有关 PHP 的运行资料,到此为止所有安装结束。

Page 68: 网站的 PHP 实现技术

3.4 安装说明

前面介绍了 PHP 的 4 种典型配置环境,但每种软件在安装的时候都有可能会遇到一些意想不到的问题,而且不同的人可能还需要针对自己的需要进行一些个性化的配置,因此就必须对这些软件的安装有比较深入的了解。下面就这些软件的安装再深入地说明一下。 这样使用者在遇到问题或者根据需要修改配置时才不会束手无策。

Page 69: 网站的 PHP 实现技术

3.4 安装说明

1.Apache 的安装说明Apache 的默认安装目录是 C:\program files\apache group\apache ,不过为了方便起见, 不妨将它安装到 C:\apache目录下。配置文件是 C:\apache\confXhttpd.conf,通常至少需要修改的是 ServerName 这一项,把注释符号 “ #” 去掉,最简单的是后面跟 IP 地址,对于有 WINS 的局域网用户可以用机器名,对于有 DNS 的网络用户可以用域名。在 Windows 2000 下没有设置 Server Name 一项的 Apache将不能启动。

Alias/userdir “C:/userdir/”,

Page 70: 网站的 PHP 实现技术

3.4 安装说明

假如调用: http: //localhost/userdir/不会产生任何问题,可是如果调用: http: //localhost/ userdir ,那么 localhost会被替换为 ServerName 所指定的值,假如这个值不能被正确解析,就无法访问。配置项目添加在 httpd.conf或者 srm.conf中都可以,可以将所有的配置项目都放在 httpd.conf中,这样只需要修改维护这一个配置文件,比较方便,而且避免了冲突。可是 httpd,conf 包含的内容比较多,要在里面搜索特定的项目就很不容易。可以将所有的用户自己添加修改的配置项目都放在 srm.conf中,这个文件很小,便于查看修改。

Page 71: 网站的 PHP 实现技术

3.4 安装说明

在 httpd.conf中, Apache 的其他常用的可能需要修改的设置有:

( 1 ) ServerAdmin your@email. address #管理员的 E-mail 地址。 ( 2 ) DocumentRoot “C:/apache/htdocs”, #默认的根路径,注意路径名中使用正斜线而不 是反斜线来分隔。

( 3 ) DirectoryIndex index.html index.php index.php3 index.htm index.shtml

这一项指明了在每个目录中的默认文档及其顺序。 ( 4 ) AccessFileName.htaccess#目录访问的配置文件名,用资

源管理器会发现无法将一个文件改名为“ .htaccess”,不过在命令行方式下可以,用 Notepad也可以使用“另存为”方式将文件保存为这个文件名。

Page 72: 网站的 PHP 实现技术

3.4 安装说明 2.MySQL 的安装说明

MySQL 的默认安装目录是 C:\mysql ,安装结束后没有任何安装结束提示信息,请单击 Finish按钮,直接就退出了。如果需要安装到其他目录,建议先安装到 C:\mysql ,然后再整个目录移动到自己希望的地方,例如移动到 D:\mysql 之后,然后需要编辑 D:\mysql\my-example.cnf (*.cnf的文件在 Windows 2000 中会被注册成为 SpeedDial 文件,在资源管理器中无法操作时,要用命令行来启动 Notepad 编辑,例如运行 Notepad D:\ h11ysqlVny-exanlple.cnf,但是这个文件是 UNIX系统下的文本文件格式,在 Notepad 中不能正确换行,可以用 write打开编辑,或者用 write打开后保存一次,再用 Notepad 就可以编辑了。 )找到 basedir 一行,去掉前面的“ #”号注释,将后面的路径改为移动后的目录 (目录分隔符要用正斜线而不是反斜线 ),然后另存为: C:\huy.cnf。

Page 73: 网站的 PHP 实现技术

3.4 安装说明

用服务方式启动的 MySQL 如果用 net stop mysql 来停止,会得到一条出错消息,例如:

C:\>net stop mysql MySQL 服务正在停止。 系统出错。 系统发生 1067错误。 进程意外终止。 MySQL 服务已成功停止。

这没有关系, MySQL确实已经停止了。但是假如不希望看到任何出错消息的话,可以用以下的命令来停止: C:\>mysql\bin\mysqladmin-u root shutdown ,如果没有任何提示信息,说明 MySQL已经成功停止了。

Page 74: 网站的 PHP 实现技术

3.4 安装说明

3.PHP 4.0 的安装说明PHP 4.0 与 PHP 3.0 有颇多不同之处,首先 php.ini 的大小就比 php3.ini 大了几乎一倍。所要修改的两项与 php3.ini 中一样,即 include_path 与 extension_dir 。不过由于内置了 MySQL 的支持,如果只用 MySQL ,那么连 extension_dir也不用修改,保持默认值即可。 PHP4.0提供了两个 php.ini 的版本可供选择: php.ini-dist 和 php.ini-optimized ,如果使用 php.ini-dist 来进行修改,那么在使用上没什么问题。可是如果用了 php.ini-optimized 文件来进行修改,那么会遇到重大问题。

Page 75: 网站的 PHP 实现技术

3.4 安装说明

大家知道, PHP 对于表单的处理极为方便,对于使用了 post方法的表单, PHP会自动根据表单的 name生成同名的变量,几乎所有的 PHP 程序都是这样使用自动生成的表单变量的,然而如果将 php.ini-optimized拷贝到 C:\WlNNT 目录下并改名为 php.ini 的话,将没有自动表单变量生成!仔细看看 php.ini-optimized ,有这么一段:

Page 76: 网站的 PHP 实现技术

3.4 安装说明

register_globals'Off;Whether or not to register the EGPCS variables as global;variables.You may want to turn this off if you don't want;to clutter your scrIPts' global scope with userdata.This makes;most sense when coupled with track_vats-in which case you can;access all of the GPC variables th.rough the $HTTP_*_ VARS[],;variables.

为了能够正确运行其他人写的 PHP范例程序,建议还是改成: register_globals=On 。

Page 77: 网站的 PHP 实现技术

4 PHP 的语法

在前面几节中介绍了有关 PHP 的概念以及如何安装,从这一节开始将介绍 PHP 的语法,这是非常必要的,也是学好 PHP语言的基础。

Page 78: 网站的 PHP 实现技术

4.1 语法概述

本节将从一个最简单的 PHP例子开始,通过该例子来讲解 PHP 程序的格式、嵌入方法、引用文件和程序注释等方面的一些最基本的内容。

1. 第一个示例几乎所有介绍计算机编程语言的书籍中,都会使用“ hello ,world”程序,因此,在这儿也用 PHP 来编写这个最基本的“ hello , world”程序。

Page 79: 网站的 PHP 实现技术

4.1 语法概述

<html>

<head>

<title>The First program</title>

</head>

<body>

<?

Echo "hello,world\n";

?>

</body>

</html>

Page 80: 网站的 PHP 实现技术

4.1 语法概述

这十行程序在 PHP 中不需经过编译等复杂的过程,只要将它放在可执行 PHP 语法的环境中,并将它存成文件 helloworld.php即可。在用户的浏览器中,只要在地址栏中输入 http: //some.hosmame/helloworld.php ,就可以在浏览器上看到 “ hello , world”的字样出现。 这个程序中只有三行是纯PHP 的,其他七行都是标准的 HTML 语法。而它在传回浏览器时和 JavaScript 或 VBScript 完全不一样, PHP 的源程序没有传到浏览器,只在浏览器上看到几个 “ hello , world”字符。

Page 81: 网站的 PHP 实现技术

4.1 语法概述

第六行和第八行,分别是 PHP 的开始及结束的嵌入符号。第七行才是服务器端执行的语句。在这个例子中,“ \n”和 C语言中的用法一样,表示换行的意思。在第 1节也曾介绍过 PHP 是混合多种语言而成,而 C 正是含量最多的语言。在一个语句结束后,必须加上分号( ;)代表结束,否则会出错。

Page 82: 网站的 PHP 实现技术

4.1 语法概述

2. 嵌入方法要在主页中嵌入 PHP ,一般有以下几种方法:

方法一: <? echo(" 这是第一个 PHP 语言的嵌入例子 \n");?> 方法二: <?php echo(" 这是第二个 PHP 语言的嵌入例子 \n"); ?> 方法三: <script language= "php"> echo(“ 这是第三个 PHP 语言的嵌入例子,它类似 JavaScript

及 VBScript 语法的 PHP 语言嵌入 "); </script>

Page 83: 网站的 PHP 实现技术

4.1 语法概述

方法四: <%echo(" 这是类似 ASP 嵌入语法的 PHP 例子 ");%>

其中第一种及第二种是最常用的两种方法,其结构是: <?(php)+程序代码 +?>,第三种方法对熟悉 Netscape 服务器产品的网页制作人员来说,肯定比较熟悉,它是类似于 JavaScfipt 的写作方式。第四种方法对于从Windows NT 平台的 ASP转向 PHP 的用户来说似曾相识,只要用 PHP 4.0 版本以后的服务器都可以用“ <%”符号开始,以“%>”符号结束,但想用第四种方法的使用者要注意,只有在 php.ini加入 asp_tags 或者在编译 PHP4.0 时加入 --enable-asp-tags 的选项时,第四种方法才会有效。

Page 84: 网站的 PHP 实现技术

4.1 语法概述

3. 引用文件PHP 的特色之一就是它的引用文件了。用这个方法可以将常用的功能写成一个函数, 放在文件之中,然后在引用文件之后就可以调用这个函数了,这样既可加强代码的灵活性,也有利于写出可重复使用的代码。引用文件的方法有两种: require()函数及 include()函数。

( 1 ) Require()的使用方法。如“require(“MyRequireFile.php”) ;”。这个函数通常放在 PHP 程序的最前面, PHP 程序在执行前,就会先读入 Require 所指定引入的文件,使它变成 PHP 程序网页的一部分。常用的函数,可用这个方法将它引入网页中。

Page 85: 网站的 PHP 实现技术

4.1 语法概述

( 2 ) Include()的使用方法。如“ include(“MylncludeFile.php”) ;”。这个函数一般是放在流程控制的处理区域中。 PHP程序网页在读到 include 的文件时,才将它读进来。这种方法,可以把程序执行时的流程简单化。

关于如何使用引用文件的例子将在后面的章节提到,这里就不说明了。

Page 86: 网站的 PHP 实现技术

4.1 语法概述 4. 程序注释

在 PHP 的程序中,加入注释的方法有很多种。可以单独使用 C 语言、 C++语言或者是 UNIX的 Shell 语言的注释方式,也可以混合使用。这可以让每个写 PHP 网页程序的网管或程序员发展出属于自己的写作风格。程序的注释种类

<? echo " 这是第一种方法的例子。 \n";// 本例是 C 语法的注释 /* 本例采用多行的注释方式 */ echo " 这是第二种方法的例子。 \n"; echo " 这是第三种方法的例子。 \n";# 本例使用 UNIX Shell 语法

注释 ?>

Page 87: 网站的 PHP 实现技术

4.1 语法概述

不过在使用多行注释时请注意,不能使注释陷入循环当中,否则会引起错误。

<?

/*

echo " 这是错误的示范。 \n";/* 循环注释会引起问题 */

*/

?>

Page 88: 网站的 PHP 实现技术

4.2 常量与变量

在 PHP 中,有常量和变量之分,常量是指 PHP 中自带的一些常数,不用用户自己去定义,可以随时引用到自己的程序中,而变量是指在 PHP 中定义了许多变量类型,用户若想使用这些变量类型,就必须根据在 PHP 中命名这些变量的规则以及他自己的需要来定义变量。

Page 89: 网站的 PHP 实现技术

4.2 常量与变量

1. 常量PHP 本身定义了以下一些常量。

( 1 ) FILE这个内定常数是 PHP 程序文件名。若引用文件( Include 或Require )则在引用文件内的该常量为引用文件名,而不是引用它的文件名。

( 2 ) LINE这个内定常量是 PHP 程序行数。若引用文件( Include 或 Require )则在引用文件内的该常数为引用文件的行,而不是引用它的文件行。

Page 90: 网站的 PHP 实现技术

4.2 常量与变量

( 3 ) PHP_VERSION这个内建常量是 PHP 程序的版本,如“ 3.0.8-dev” 。

( 4 ) PHP_OS这个内建常量指执行 PHP 的操作系统名称,如“ Linux” 。

( 5) TRUE这个常量就是真值 (True)。

( 6) FALSE这个常量就是假值( False )。

( 7) E_ERROR这个常量指到最近的错误处。

Page 91: 网站的 PHP 实现技术

4.2 常量与变量

( 8) E_WARNING这个常量指到最近的警告处。

( 9 ) E_PARSE本常量为剖析语法有潜在问题处。

( 10 ) E_NOTICE这个常量为发生不寻常但不一定是错误处。例如存取一个不存在的变量。

这些 E_开头形式的常量,可以参考 error_reporting()函数。

Page 92: 网站的 PHP 实现技术

4.2 常量与变量

当然在程序编写时,以上的内定常量是不够用的。 define()的功能可以自定义所需要的常量,如下面的一个例子:

<?

define( "PI","3.14");

echo PI; // 送出值 3.14 。 ?>

Page 93: 网站的 PHP 实现技术

4.2 常量与变量

2. 变量数字仅能解决程序当中的内部数据的一部分问题。当需要保存数据值,并能在运行程序中按需要进行改变时,就要用到变量。

( 1 )变量的类型PHP 有三种类型的变量:

①标量:一次保存一个特定数字或字符串。通常用 scl_作为标量名的起始字符。如果该变量只保存一种类型的值时,一般在其名字前使用 int_或 str_前缀。

②数组:存储数值的列表。这些数值可能是数字、字符串或是另一个数组。通常用 alt_作为数组变量的起始字符。

③对象:存储变量信息和函数。

Page 94: 网站的 PHP 实现技术

4.2 常量与变量

注意:在 PHP 中的变量名是区分大小写的。这说明 $scl_vamaI'ne 、$Scl_vamame 、 $ScI_Varname 和 $SCL_VARNAME 代表不同的变量。下面将分别讨论每一种变量类型。用户将知道如何命名变量、如何设置它的值以及它 们的一些用法。

( 2 )标量标量用来记录单个信息。例如,学生的名字或购买的数量。只要标量名以 $为第一个 字符,第二个字符是字母或下划线,就可以使用任意的字母作为标量名,为了方便记忆和使 用,最好能使该名称具有一定意义。

Page 95: 网站的 PHP 实现技术

4.2 常量与变量

下面是一些变量的名字及含义: ①*$int_page_number :存储当前页码。 ②*$str text_title :存储文章的标题。 ③*$0 :无效的变量名。因为变量名不能以数字字符开始。

一般来说,有描述能力的变量名更好。例如, $int_book_number 比 $booknum 更好,这是由于 $int_book_number 的描述性更好。由于较长的变量名有助于理解程序,因此在程序中不使用比较短的变量名为好。 PHP 变量名的长度实际上没有什么限制,但是一般把长度限制在 20 个字符以内。使用比 20 个字符还长的名字,将会增加产生拼写错误的几率。

Page 96: 网站的 PHP 实现技术

4.2 常量与变量

下面来看一下如何给变量赋值。一般来说,对一个标量赋值通常使用等号( =),请看下面的例子。

$key=1;

echo $art_mixed[$key];

<?PHP

$int_student_number=64;

$str_text_title='Theboyisagoodstudent!';

?>

Page 97: 网站的 PHP 实现技术

4.2 常量与变量

以上代码给变量赋值。当给变量赋予简单的文本值时,通常使用单引号字符串,这可 以使效率更高。对变量赋值以后,可以根据需要改变它们的值。下一个例子先对一个变量赋值,然后通过第二次赋值来改变变量的值。第二次赋值使原有的数值加 1 。

<?PHP

$int_smdent_number=64;

$int_student_number=$int_student_number+1;

?>

在 PHP 编程中,永远不必声明、定义或分配简单的数据类型(标量或数组),第一次使用变量名就相当于定义它。

Page 98: 网站的 PHP 实现技术

4.2 常量与变量 ( 3 )数组变量

一个数组就是把一系列数字和字符串作为一个单元来处理。数组中的每一个信息都被 认为是数组的一个元素。例如,可以用数组存储一个文件中的所有行或者存储一个地址列 表。只要不用数字作为数组变量名的第一个字符,而且在创建数组名时不使用除数字、字 母和下划线之外符号的时候,就不必考虑数组变量的命名规则。数组元素有三种方法设置初始值,可以对每一个元素分别赋值。

$arr_animal['panda']= 'a are nimal in SiChuan province';

$arr_animal['dog']= 'an animal in people's home'; $arr_zoo['camel']='Four-legged animal.';

Page 99: 网站的 PHP 实现技术

4.2 常量与变量

也可以用下面的方法同时对多个元素赋值: $arr_animal=an(

'panda'=>'a rare animal in SiChuan province.'

'dog'=>'an animal in people's home'

'camel'=>'Four-legged animal.'

);

Page 100: 网站的 PHP 实现技术

4.2 常量与变量

最后还有一种最快的方法,那就是在数组的下一个空余位置上增加一个元素,如第一 个位置是 0 ,第二个位置是 1 ,依此类推。例如,下面的代码给 $arr_names 数组增加了 3个元素,这 3 个元素的下标分别为 0 、 1 和 2 (前提是这个数组没有其他 元素存在)。

$arr_names[]='Jack';

$arr_names[]='Tom'

$arr_names[]='Jane';

在知道了如何给数组元素赋值之后,接下来就来讨论一下如何获取这些值。

Page 101: 网站的 PHP 实现技术

4.2 常量与变量

] 为了得到数组名为 arr_animal ,且数组下标为 'panda'的值,可以使用以下方法:

$key='panda'

$value=$arr_animal[$key]

这两行代码运行以后, $value 的值变为 'a rare animal in SiChuan province'。文本字符串 也可以用来指定要哪一个数组元素的值。例如:

$value=$arr_animal[panda];

用于数组下标的字符值不能用单引号括起来,且数组下标中不应该有空格。

Page 102: 网站的 PHP 实现技术

4.2 常量与变量

arry_mixed 数组的数组下标分别是 0 、 1 、 Jack和 2 。如果数组下标没有给定, PHP 就自动提供一个。默认的数组下标是以 0 开始的,以后当数组下没有赋值时默认值每次加 1 。可以用标量变量替换所有的数组下标(数字和字符串)并仍能获取它们原有的值。例如,可以这样写:

$key=1; echo $art_mixed[$key];

以上两行将显示 54 ,这个例子显示 PHP 可以按照需要把数字数据类型转换成字符数 据类型。在以下的代码行中,数组下标被初始化成字符串:

$key=1; echo $arr_ mixed[$key];

Page 103: 网站的 PHP 实现技术

4.2 常量与变量

这两行代码也显示 54 ,表明 PHP 可以自动地把字符串转换成数值。有时,可能需要在数组初始化过程中使用变量,例如:

$int_page_number=54;

$str_first_name='Jack';

$arr_mixed=array(

1,$int_page_number,$str_first_name=>'Jack','application'

);

Page 104: 网站的 PHP 实现技术

4.2 常量与变量

( 4 )多维数组对于绝大多数程序来说,仅有一个简单的数值列表是很不够的。例如,假如既要存储 书的总页数,又要存储出版商的名字。这需要使用两个列表: lst_number_ofjages 和 1dpublishernames ,但在需要增加或修改信息的时候,就很不方便了。并且在保证两个列 表的同时也留下了隐患。多维数组提供了一个极灵活的数据结构,每一个数组元素均可以 包含另外一个数组。多维数组可以按以下格式进行初始化:

Page 105: 网站的 PHP 实现技术

4.2 常量与变量$arr_books=array('0-679-76781-9'=>array('name'=>'the New History' ,'pages'=>400 ,'publisher'=>'Vintage Books'),'0-512-85595-5'=>array('name'=>'Children of the Mind','pages'=>549,'publisher'=>'Tor Books') );

Page 106: 网站的 PHP 实现技术

4.2 常量与变量

在上例中使用了每本书的 ISBN号作为检索数组 $arr_books的多维数组下标,且每本书都有它自己的子数组,用以描述其自己的特定信息。为了查询子数组中的信息,数组下标由一个扩展为两个,例如:要查询 the New History一书的页数有多少,可以使用以下的表达式:

$arr_books[0-51-85595-5][pages]用户会发现多维数组十分灵活方便。毫不夸张地说,几乎每一个稍微复杂的程序中都 可能使用多维数组。之所以这样,其中一个很重要的原因就是多维数组使用起来比较灵活,随时都可以加入需要的元素。假如在程序运行过程中,觉得应该将作者名也存进去的话, 那么只需在多维数组中加入如下信息即可:

Page 107: 网站的 PHP 实现技术

4.2 常量与变量

$arr_books[0-512-85595-5][author]= 'Orson Scott Card'

注意数据结构允许在一个子数组中加入一项内容,而不会影响其他数据。当开始使用 PHP从多个数据库表中收集信息时,多维数组能用来组合这些信息。例如,当使用一个涉及到多个产品供应商的产品数据库时,可以从第一个产品供应商开始将相关信息存人多维数组中。然后,再读取第二个产品供应商的信息,并将这些新信息写入同一个多维数组中。将所有产品供应商信息读取,并全部写入多维数组以后,这个多维数组就包含了所有的货存信息。

Page 108: 网站的 PHP 实现技术

4.2 常量与变量

( 5 )变量替换双引号字符串还有一个特性——变量替换。变量替换意味着 PHP 可以用在双引号字符串中变量的值替换其名字,把这个概念延伸到通常含义即是变量代表了它们的值。例如,如果 Sim_count 为 14 ,那么 $int_count十 14 就是 14+14=28。PHP 以及大多数计算机语言,这种替换是在字符串内完成的。例如:

$str_size='big';

echo"Jack wasa $str_size man.";

将显示为: Jack was a big man.

Page 109: 网站的 PHP 实现技术

4.2 常量与变量

但是,如果需要在变量后面立即跟随非空格或非标点符号外的其他字符时,就会出现 问题。例如,以下代码段显示了这种情况:

$str_size='big';

echo"Jack was a $str_sizeger man.";

PHP不能寻找后面跟有字符串 ('ger')的变量 ($str_size),而是寻找变量名为 $str_sizege 的变量。如要寻找带有字符串('ger')的变量时,可把变量名用大括号括起来解决这个问 题:

$str_size='big';

echo "Jack was a ${str_size}ger man.";

Page 110: 网站的 PHP 实现技术

4.2 常量与变量

然而不幸的是,当使用变量替换时: PHP4不允许同时使用多于一个的数组下标。另外在 PHP 中安全存取书籍名的方法如下:

$second_level=$arr_books[1st_books];

$third_levwl=$second_level[0-679-76781-9];

echo"The name is $third_level[name].";

Page 111: 网站的 PHP 实现技术

4.2 常量与变量

( 6 )动态变量名PHP允许用户动态地创建变量名。当程序运行时,使用特殊的符号可创建新的变量名:

//store the name of the dynamic variable. $scl_dynamic='str_name'; //assign a value to the dynamic variable. $$scl_dynamic='John'; echo"\$str_name=$str_name\n"; 此程序将显示: $str_name=John

尽管动态变量名存在一些吸引人使用的地方,但是数组的灵活性已经足以解决大多数有可能需要使用动态变量名的问题。

Page 112: 网站的 PHP 实现技术

4.3 运算符

PHP 中的运算符号与 C 语言中的相似,它包括算术运算符号、字符串运算符号、赋值 运算符号、位元运算符号、逻辑运算符号和一些不常用的运算符号,下面将一一进行详细 地介绍。

1. 算术运算符号算术运算 (ArithmeticOperators)符号,就是用来处理四则运算的符号,这是最简单,也是最常用的符号,特别是对数字的处理,几乎都会使用到算术运算符。下面列举一些常见的运算符及其意义,如下所示。

Page 113: 网站的 PHP 实现技术

4.3 运算符

以下是简单的算术运算例子。 <?php $a=12; $b=5; $c=7; echo $a+$b. "<br>\n";

Page 114: 网站的 PHP 实现技术

4.3 运算符

echo $a-$b . "<br>\n";

echo $a*$b . "<br>\n";

echo $a/$b . "<br>\n";

echo $a%$c . "<br>\n";

$a++;

echo $a. "<br>\n";

$c--;

echo $c;

?>

Page 115: 网站的 PHP 实现技术

4.3 运算符

2. 字符串运算符字符串运算 (StringOperator)的符号只有一个,就是英文的句号 (. )。它可以将字符串连接起来,合并成新的字符串。以下是字符串运算的例子。

<?php

$a ="PHP4.0 程序设计及实例教程 ";

$ab=" 值得您购买 ";

echo $a.":".$b;

?>

Page 116: 网站的 PHP 实现技术

4.3 运算符

3. 赋值运算符赋值运算 (Assignment Operator)尽管有时会让人很迷惑,但它却可以让程序更简洁, 提高执行效率。常见的赋值运算符号及其意义如下表所示。

Page 117: 网站的 PHP 实现技术

4.3 运算符

下面是使用赋值运算符号的例子: <?php

$a=7;

$a+=5; // 即 $a=$a+2;

echo $a."<blc>\n";

$b=" 我 ";

$b.=" 爱 ";//$b=" 我爱 "

$b.=" 你 ";//$b=" 我爱你 "

echo"$b<br>\n";

?>

Page 118: 网站的 PHP 实现技术

4.3 运算符 4. 逻辑运算符号

逻辑运算( Logical Operators )用来判断表达式的真假,常用于条件语句的执行,以及 循环语句的开始或结束。表 5-4列举了逻辑运算符号及其意义。

Page 119: 网站的 PHP 实现技术

4.3 运算符

这些逻辑运算符的意义比较简单,具有 C 语言基础的读者都能理解,需要注意的是,虽然“ &&”运算符和 and 运算符的意义相同,但它们的优先级不同,“ &&”的优先级要高于and 。在同样条件下,先进行“ &&”运算,再进行 and 运算。“‖”和 or也一样。关于运算符的优先级,读者可参考关于运算符的附录。在 PHP 中, 0表示逻辑值为假 (False),非 0 的任何一个数都表示逻辑值为真 (True)。例如: 2 、 51 等都表示真。这些逻辑操作符的具体用法将在后面的流程控制一节中重点介绍,相信通过一些实例,读者都能够熟练掌握。

Page 120: 网站的 PHP 实现技术

4.3 运算符

5. 特殊运算符号除了以前介绍的运算符号外,还有其他一些特殊的运算符,表 5-5中列举了这些特殊的运算符号及其意义。

Page 121: 网站的 PHP 实现技术

4.3 运算符

例如:$int_a表示一个标量,而 int_a不表示任何意义,而“ &$int_a”表示内存中实际储存标量 $int_a 的地址。@运算符加在函数前,则不会显示错误信息,不过这不能解决实际问题,只起到掩耳盗铃作用,要想釜底抽薪地解决问题,还要用到 if语句。如调用函数 reset($form_array),如果之前@form_array未设定,则会显示错误信息。在函数前加上@,即:@reset ($form_array),则不显示错误信息,用下面语句便可解决问题。

Page 122: 网站的 PHP 实现技术

4.3 运算符

<?

If(isset($form_array)){

reset($form_array);

while(1ist($k , $v)=each($form_array)){

do_something($k,$v);

}

}

?>

上例中用函数 isset() 判断 $form_array是否已被设定,如果已被设定,则进行程序中所 示的操作。

Page 123: 网站的 PHP 实现技术

4.3 运算符

“->’’ 用来表示一个类的方法或属性,例如: form lable表示一个类,即表单里的一个标签,用“ form lable->init” 可表示它的一个方法,即初始化,用“ form_lable->heigat” 可表示它的一个属性,即这个标签的高度。“=>”用来表示数组的元素,这在数组一节中我们已经介绍过,这里不再赘述。 “?:”为三元操作符,其语法为:

(exprl)?(expr2):(expr5);具体执行过程如下:

先判断表达式 exprl 的逻辑值,若为真 (True),则上式返回 expr2 ,否则返回 expr5,其中 expr2 和 expr5可以为表达式,也可为实际可执行语句。下面通过两个例子分别对其进行介绍:

Page 124: 网站的 PHP 实现技术

4.3 运算符

<?

$int_a=5;

$int b=4;

$int_c=($int_a>$int_b)?$int_a:$int_b;

echo"$inl_c<br>";

?>

这段程序输出结果为: 4

Page 125: 网站的 PHP 实现技术

4.3 运算符程序具体执行过程为:标量 $int_a赋值为 5,标量 $int_b赋值为 4 。第三行代码先判断 表达式 ($int_a>$int_b)的逻辑值,结果为假,所以:右边返回 $int_b ,相当于将 $int_b的值赋给 $int_c ,因此输出结果为 4 。以上程序功能也可以用以下代码实现。

<? $int_a=5; $int_b=4;($int_a>$int_b)?($int_c=$int_a):($int_c=$int_b); echo "$int_c<br>"; ?>

输出结果也是 4 。

Page 126: 网站的 PHP 实现技术

4.3 运算符

其中第三行的执行过程为:判断表达式 ($int_a>$int_b)的逻辑值,结果为假,所以执行 ($int_c=$int_b)。取得了与第一个例子同样的效果。

“?:”运算符具备以后要介绍的 if语句的全部功能,它比 if语句更简洁,也可以实现多层嵌套,不过这样会使代码的可读性变差,建议读者在写代码的时候应注重其可读性,以 便自己和其他人进行阅读和修改。

Page 127: 网站的 PHP 实现技术

4.4 流程控制

流程控制对任何编程语言均是非常重要的,在任何程序中都必须用到它, PHP 当然也不例外。有三种基本的流程结构:顺序、条件和循环。下面就分别进行介绍。

1.if 、 else 、 elseif 、 endif 语句 ( 1 ) if 语句

if语句是所有编程语言都有的最基本而且最重要的流程控制语句, PHP4.0 中 if语句的格式同 C 语言非常相似,不过,它同 C 语言中的 if控制语句还是有一些不同的地方,这些差别将在文中提及。

Page 128: 网站的 PHP 实现技术

4.4 流程控制

if语句的结构为: if(expression)

statement

其中 expression 为逻辑表达式,该表达式既可像 ($a<$b)这样简单,也可像 ($a>$b&&$c!= $d‖$e<=$f)这样复杂。当expression 的值为真或为非零时执行 statement 语句。如:

if(Sa<$b)

print"Sa小于 Sb";

Page 129: 网站的 PHP 实现技术

4.4 流程控制

此时 statement 为单行语句,如果 statement 语句比较复杂,为多行语句时,应该将表达式写成:

if(expression)

{statementl;

statement2;

statelneln5;

… }

Page 130: 网站的 PHP 实现技术

4.4 流程控制

( 2 ) else 语句当在 expression 为假时,需要执行一些语句,那么就用下面的格式:

if(expression) { statementl } else{ statement2 }

此句的意思是当 expression 的值为真时执行 statementl ,为假时执行 statement2 。

Page 131: 网站的 PHP 实现技术

4.4 流程控制

( 3 ) elseif 语句如果在 expression 为假时,还有不止一种可能,那么程序必须在 expression 为假时继续作出判断,这时就要用到 elseif语句。

其结构为: if(expression0) { statementl // 当 expression0 为真或非零 } elseif(expressionl) {

Page 132: 网站的 PHP 实现技术

4.4 流程控制

statement2 //2expression0 为假,但 expressionl为真

}[elseif(expression2){statement5// 当 expression0 和 expressionl 都为假 , 但 expression2

为真}…][else{

Page 133: 网站的 PHP 实现技术

4.4 流程控制

statement // 当 expression0 和 expressionl都为假

} ]

如果需要的话, elseif语句可以嵌套多层。但值得注意的一点是如果进行多层嵌套,一定要注意它们的层次,千万不能弄混淆,否则程序将出现逻辑错误。如:

if($a <5) print"Sa 小于 5"; elseif($a=5) print"$a 等于 5"; else print"$a 大于 5";

Page 134: 网站的 PHP 实现技术

4.4 流程控制 ( 4 ) if(); ... endif 语句 在 PHP 中还可以使用if();statementendif;这种格式来代替:if(){statement}

这是和 C 语言不同的地方,但这两种格式它们的功能是完全一样的,只是书写形式不 同而已。

Page 135: 网站的 PHP 实现技术

4.4 流程控制

比较完整的格式为: if(expression0):

statementl

elseif(expressionl):

statement2 ; [elseif(expression2):

statement5

Page 136: 网站的 PHP 实现技术

4.4 流程控制 ] [else: statement ] endif;

当 php 和 html进行嵌套时,后者更为简洁,也建议读者在使用时采用后面这种格式。

<?if($a!=5);?><input type='text' name='textfield' value=' '>…<?endif;?>

这样省去了很多烦人的大括号,也减少了程序出错的机会。

Page 137: 网站的 PHP 实现技术

4.4 流程控制

2.While 和 do While ( 1 ) while

在程序编写过程中, while 语句也是常用到的。 PHP4.0 中的while 语句也和其他编程 语言差不多,其格式为:

while(expression)

{statement

}

当 expression 为真 (True)或值不为零时将循环执行 statement ,直到 expression 为假, 跳出循环。

Page 138: 网站的 PHP 实现技术

4.4 流程控制

while 语句还有一种形式是 PHP 中特有的,其格式为: while(expression): statement endwhile; <? $a=l; while($a<10): print $a; $a++; endwhile; ?>

Page 139: 网站的 PHP 实现技术

4.4 流程控制

( 2 ) dowhile

和 C 语言差不多, PHP 中也有 do while 语句,其格式为: do

{statement

}

while(expression)

Page 140: 网站的 PHP 实现技术

4.4 流程控制

当 expression 为真或值不为零时将循环执行 statement ,直到 expression 为假,跳出循 环。它的功能和 while循环语句一样,只是有一点区别, C 语言中也有这种区别:那就是当第一次执行 do while 语句时,先执行 statement ,再判断expressiono 。所以不管 expression 为真或为假; statement都能至少执行一次。但 while 就不同了,它是先判断 expression ,再执行 statement ,所以有可能 statement 一次也不能执行。实际应用中要根据需要灵活运用,不要将 while语句和 do while 语句简单照搬。

Page 141: 网站的 PHP 实现技术

4.4 流程控制

3.for 循环语句for循环语句的格式非常灵活,同样的循环语句可以用好几种不同的格式来写。和 C 语言“几乎”一样。 最常见的格式为:

for(expressionl;expression2;expression3)

{statement

}

Page 142: 网站的 PHP 实现技术

4.4 流程控制

或为 PHP 中特有的格式 (C 语言中没有 ) for(expressionl;expression2;expression3):

statement

endfor;

for 语句首先执行初始化语句 expressionl ,再判断条件 expression2 ,如果 expression2 为真或值不为零时将执行 statement ,然后执行 expression3 ,此时第一个循环已经执行完毕, 再接着执行第二个循环,判断 expression2 ,执行 statement 、 expression3 ,直到 expression2 为假,跳出循环。

Page 143: 网站的 PHP 实现技术

4.4 流程控制

所以 for 语句可以看成是: for( 循环变量初始化语句;判断条件;循环变量变化语句 )

{ 循环体 }

由此可见,可以将 for 语句写成下面的这几种格式,它们的功能是完全一样的:

①格式一: expressionl;

for(;expression2;expression3)

{statement;}

Page 144: 网站的 PHP 实现技术

4.4 流程控制

②格式二:expressionl;

for(;expression2;)

{statement;

expression3;

}

Page 145: 网站的 PHP 实现技术

4.4 流程控制

③格式三:expressionl;

for(;;)

{if(expression2):

statement;

expression3;

endif;

}

Page 146: 网站的 PHP 实现技术

4.4 流程控制 4.break 和 continue 标记 ( 1 ) break

break标记的作用是跳出整个循环。 <? $a =0; while($a<10) {if($myarray[$a] = "stop") break; … $a++; } ?>

Page 147: 网站的 PHP 实现技术

4.4 流程控制 ( 2 ) Continue

continue标记的作用是跳出当前循环,即跳过当前循环中剩下的还未执行的语句,再接着执行下一次循环。

<?$a =0;while($a <10){statementl;$a++;if($a%2)continue;statement2;} ?>

Page 148: 网站的 PHP 实现技术

4.4 流程控制

此段语句的意思是当 $a 是偶数时,将不执行 statement2 。

break和 continue标记可以加在任何循环语句中。下一节将要介绍的 switch流程控制 语句可以帮助读者更好地理解 break和 continue标记的作用。

Page 149: 网站的 PHP 实现技术

4.4 流程控制

5.switch 流程控制语句switch 语句就像是由一系列 if语句组成的。其格式如下:

switch (expression)

{case exprl:

statementl;

case expr2:

statement2;

case expr3:

statement3;

Page 150: 网站的 PHP 实现技术

4.4 流程控制

default:

statement;

}

当 expression 等于某个 case 中所列的 expr 时, switch 语句将从对应的 statement起 (包括本身 )开始执行,并依次执行下面的 statement ,直到碰到 break 标记为止。如果没有 expr 和 expression 相等,那么 switch 语句将执行 default 相对应的 statement 。

Page 151: 网站的 PHP 实现技术

4.4 流程控制

如果有一个程序用 if语句写为: if($a==0)

print"$a 等于 0";

if($a==1)

print"$a 等于 1";

if($a==2)

print"Sa 等于 2";

if($a==5)

print"$a 等于 5";

Page 152: 网站的 PHP 实现技术

4.4 流程控制

那么用 switch 语句可改写为 : switch($a)

{case0:

print"$a 等于 0”;

break;

case 1:

print"$a 等于 :1";

break;

Page 153: 网站的 PHP 实现技术

4.4 流程控制

case2:

print"Sa 等于 2";

break;

case5:

print"Sa 等于 5";

}

Page 154: 网站的 PHP 实现技术

4.4 流程控制

注意 switch 语句中的 break 标记,如果没有这些 break 标记,那么当 $a=0 时,程序将输出:

$a 等于 0; $a 等于 1; $a 等于 2; $a 等于 5

如果只需要判断 $a 的范围是否在 0~ 2 之间,那么用 switch 语句写为:

Page 155: 网站的 PHP 实现技术

4.4 流程控制

switch($a)

{case0:

case 1:

case2:

print"$a 在 0 和 2 之间 ";

break;

default:

print"$a 不在 0 和 2 之间 ";

}

Page 156: 网站的 PHP 实现技术

4.4 流程控制

此处, switch 语句用到了 default ,即当 Sa 和 0 、 1 、 2都不相等时,将执行 print“$a不在 0 和 2 之间”这一程序。

以上所列举的例子中, break 标记都可以用 continue 来代替,这是因为 switch 语句本身只会循环一次 ( 即执行一次 ),所以, break和 continue 用在 switch 语句中没有区别。

Page 157: 网站的 PHP 实现技术

4.5 函数

函数帮助程序员组织自己的代码,实现一定的功能,同时模块化程序设计,能够使代码结构清晰易懂。

例如,在程序中已经包含了一个计算圆面积的函数 area_eircle() ;在调用时可以用以下代码:

$int_area=area_circle(10);

Page 158: 网站的 PHP 实现技术

4.5 函数

读者能看出这段代码的含义,即计算一个半径为 10 的圆的面积,然后将结果赋给标量 $int_area;函数就相当于一台机器,而它的参数就相当于原材料,原材料经过函数加工,就变成了一件新的产品,也就相当于函数的返回值。在此例中,函数 area_circle()是机器,而半径 10 为原材料,函数调用 area_circle(10),相当于加入原材料,使机器运作,将产品供应给客户 $int_area;而函数的定义和编写过程就相当于机器的发明与制造过程。

Page 159: 网站的 PHP 实现技术

4.5 函数

1. 函数返回值函数可分为两类:有返回值的函数和无返回值的函数,相当于 pascal 中的函数 (function)和过程 (procedure)。两者的区别在于函数定义过程中是否有 return 语句。在 PHP 中即使函数什么功能也不实现,它依然是合法的,但在 pascal 中就不行了。下面介绍函数的定义:函数的定义语法为:

function 函数名 ( 参数列表 ) { 函数功能 ; }

Page 160: 网站的 PHP 实现技术

4.5 函数

以求圆面积函数 area_circle 为例,定义如下: <?

Function area_circle($f1t_radius)

{

$flt_area=3.1415*$flt_radius*$flt_radius;

return($flt_area);

}

echo "The area of circle is area_circle(5)";

?>

Page 161: 网站的 PHP 实现技术

4.5 函数

此程序输出如下: The area of circle is 78.5375

PHP函数的返回值可以是一个值,也可以是一个数组,例如以下定义的函数就返回一个数组:

<?

Function array_list0

{

Return array (10,20,30,40,50);

}

?>

Page 162: 网站的 PHP 实现技术

4.5 函数

再利用赋值语句: $arr_temp=array_list() ;就得到一个表示数组的变量 $arr_temp ,它的 各个元素分别为:

10,20,30,40,50;

如果想直接得到返回的数组的元素,可以利用 list 方法,例如: <?php

List($a,$b)=array_list();

Echo "$a<br>";

Echo "$b<br>";

?>

Page 163: 网站的 PHP 实现技术

4.5 函数

则输出结果为: 10

20

一般来说,利用 list 方法赋值时,是将数组中的元素依次提取出来,赋给相应的变量, 但是,当数组的下标被指定时,被指定下标的元素将被忽略,如下例:

Page 164: 网站的 PHP 实现技术

4.5 函数

<?php

Function array_lis()

{

Return array(10,'age'=>20,30,40,50);

}

list($a,$b)=array_list();

echo "$a<(br>";

echo "$b<br>";

?>

Page 165: 网站的 PHP 实现技术

4.5 函数

这段程序执行后结果为:10

30

被指定下标的元素 20 被忽略。

Page 166: 网站的 PHP 实现技术

4.5 函数 2. 向函数传递参数

向函数传递参数可分为值传递和地址传递两种方式,下面先来看一个例子:

<?php Functionadd($value) { $value++; } $int_a=2; add($int_a); echo "$int_a<br>"; ?>

Page 167: 网站的 PHP 实现技术

4.5 函数

用户可能认为,经过函数调用 add($int_a),就相当于进行 $int_a++运算,输出结果应该为 3 ,然而,实际输出结果为 2 。原因就在于此函数 add()参数传递方式为值传递,即函数调用的是 $int_a 的值,此时函数的实际形式为 add②;变量 $int_a并不参与运算,因此 $int_a 的值不变。如果想让变量 $int_a参与运算,函数调用时就必须使用地址传递方式,只需要定义函数时在参数前加上 &即可。

Page 168: 网站的 PHP 实现技术

4.5 函数

<?php

Functionadd(&$value)

{

$value++;

}

$int_a=2;

add($int_a);

echo "$int_a<br>";

?>

Page 169: 网站的 PHP 实现技术

4.5 函数

这样一来,在函数调用时,将变量 $int_a 的地址传递给函数,$int_a 就实际参与运算, 输出结果为 3 。

应用地址传递的方式将会改变某些参数的值,但是如果其他人 (特别是合作程序员 ) 仅单纯地阅读代码,而对函数具体操作不了解,这种方式很容易造成紊乱,不清楚某些变量 (特别是全局变量 ) 什么时候发生改变,这不利于变量的共享,所以在使用这种方法的时候一定要慎重。

Page 170: 网站的 PHP 实现技术

4.5 函数

3. 给函数赋予默认值 PHP 中允许函数在定义时为一些或全部参数赋予默认值,也就是说,实际调用时,可 以传递给函数某些参数,也可以不传递,如果不传递参数,参数值就用默认值;如果传递参数,参数值就用传递的值。下面举一个这样的例子:

<?php function sellf_font( $text; $color="red"; $size=6 )

Page 171: 网站的 PHP 实现技术

4.5 函数{echo"<fontsize=\"$size\"color=\"$color\“>$text</a

>"}?><?php self_font('I am a student! ','green');?><br><?php self_font('I am a student! ','green' );?><br><?php self_font('I am a student! ','green',4);?> <br>

Page 172: 网站的 PHP 实现技术

4.5 函数

这段代码将输出 3 行: I am a student ,但是第一行颜色为 red ,字体大小为 6;第二行颜色为 green ,字体大小为 6; 第三行颜色为 green ,字体大小为 4 。

赋予默认值的参数在定义时必须放在未赋予默认值的参数后面,并且在实际调用时, 只有最后的参数可以使用默认值,而其它位置上的参数都不能使用默认值,否则将会出现 错误。

Page 173: 网站的 PHP 实现技术

5 PHP 中的类

类是面向对象编程的基础,如果读者有一定的面向对象编程的基础,那么对于 PHP 中的类就不难理解。就像和 Microsoft 开发了丰富的 MFC 和 WFC供 Visual C++使用一样, PHP中的类让 PHP 能更容易地扩展自己的功能。并且更借助于互联网的发展,很多人都共享自己开发的类,使 PHP 的功能不断地强大,其应用也越来越广。学好 PHP 中的类,也是学好PHP 所必备的条件之一。和其他的面向对象语言比较, PHP中的类还算比较简单,只有类( class )、方法( method )、属性以及单一继承( extensions )等。

Page 174: 网站的 PHP 实现技术

5.1 类的定义

类就是一些面向对象概念中的成员变量和一些操作处理这些变量的成员函数的集合。 类是一种数据结构,提供了一种在程序中以现实生活的形态来思考问题的方法,也就是描 述了一个对象;反之,一个对象或者实例,就是这个类的真正实现。在 PHP 中声明一个类 的格式为:

<?php class Class Name { var $variablel; var $variable2; …

Page 175: 网站的 PHP 实现技术

5.1 类的定义function Class Name($argl,$arg2 ... )// 构造函数,完成实例的初始化工作{$this->variablel=$argl;$this->variable2=$arg2;…}function elsefunction(){}…} ?>

Page 176: 网站的 PHP 实现技术

5.1 类的定义

在定义类的内部变量时一定要带上关键字 var 。而在定义成员函数时,表示成员变量 的方法是 $this指针加上成员变量名,注意成员变量名没有美元符 $并且, PHP 中没有像 c++中那样的 private 、 public 或 friend 等关键字。也就是说,PHP 中类的成员变量和成员函数都可以被其他代码调用。

当要实例化一个类时,要用 new 运算符,其格式为: $example=new Class Name;

Page 177: 网站的 PHP 实现技术

5.1 类的定义

如果定义了构造函数(构造函数名必须与类名相同),还可在实例化该类时带上参数。如下例所示:

$example=new Class Name($ 参数 1 , $ 参数 2…);

这时将自动调用构造函数 C1msNamc ,完成实例的初始化工作。

Page 178: 网站的 PHP 实现技术

5.2 类的继承

定义一个类时还可以继承其他类。子类(或叫扩展类)将继承父类所有变量和函数。定义一个继承类时,用到 extends关键字,其格式为:

class sonclassname extends fatherclassname { var $variableI; … function sonclassname($argl , $8f92…) // 子类的构

造函数 { … }

Page 179: 网站的 PHP 实现技术

5.2 类的继承

function otherfunction()

{

…}

… }

Page 180: 网站的 PHP 实现技术

5.2 类的继承

举个例子: <?php

class chatuser // 聊天室聊客 ( 父类 )

{

var $id;

var $name;

var $sex;

var $passwd;

Page 181: 网站的 PHP 实现技术

5.2 类的继承function chatus($sex='boy',$password='')// 设置默认

参数{

$this->sex=$sex;

$this->passwd=$password;

}

functionsemame($newname)

{

$this->name=$newname;

}

}

Page 182: 网站的 PHP 实现技术

5.2 类的继承class superuser extends chatuser // 高 级 聊 客

( 子类 ){var $superpasswd;function setpasswd($passwd);{$this->superpasswd=Spasswd;}}$newuser=new chatuser(); // 如果没有参数,将使用默认

参数 $newuser-> name("hello");

Page 183: 网站的 PHP 实现技术

5.2 类的继承

$supemser=new supemser;

$supemser->name(" 大虾 ");

$Supemser->setpasswd("123");

print $superuser->name;

?>

子类在实例化时,不能自动调用父类的构造函数,但可以手动调用,如: $supemser-> chatuser("大虾 ","456");同样,如果子类也有构造函数,那么在调用子类的构造函数时,父 类的构造函数也不能自动调用。

Page 184: 网站的 PHP 实现技术

6 PHP 的常用函数

PHP 强大的功能很大一部分源于它丰富的函数库。在 PHP 4.0 中,这些函数可以分为 六十几类,将近一千多个,而且还在不断的扩展之中,下面就编者使用的经验,将最常用 的一些函数列出来,包括功能、语法、举例和说明。

Page 185: 网站的 PHP 实现技术

6.1 数组函数

所谓数组函数,即是指与数组操作相关的函数。在 PHP 中,数组函数是非常重要的,下面就来介绍几个比较重要而且也很常用的函数。

1.array() 功能:生成一个新的数组。语法: array array(…)

说明:关于数组如何建立已讲过,这里就不叙述了。

Page 186: 网站的 PHP 实现技术

6.1 数组函数

2.count()功能:返回数组元素个数。语法: int count(mixed var)。

<?

$arr_mixed=arr(2,54,'Jack'=>'the First Name','application'

);

$num=count($arr_mixed);

echo $num;

?>

Page 187: 网站的 PHP 实现技术

6.1 数组函数

说明:上面的例子先定义了一个数组 $arr_mixed ,然后用函数 count()得到该数组的元素个数,并把该值赋给了变量 $num ,而且最后输出 4 。

3.sort()功能:将数组元素按由小到大的顺序排列。语法: voidsort(array array)。

Page 188: 网站的 PHP 实现技术

6.1 数组函数

<?

$animals=anay("dog","cat","mouse","hen");

sort($animals);

for(reset($animals);list($key,$value)=each($animals);){

echo"animals[$key]=".$value."\n";

}

?>

Page 189: 网站的 PHP 实现技术

6.1 数组函数

返回的结果为: animals[0]=Cat

animals[1]=dog

animals[2]=hen

animals[3]=mouse

说明:先定义一个数组 $animals ,然后由 sort()函数对它按字母进行排序,最后通过一个循环把数组值显示出来,结果是按字母顺序排列的。

Page 190: 网站的 PHP 实现技术

6.1 数组函数

4.list()功能:列出数组元素。语法: void list(…)。例子:见 sort()函数。

Page 191: 网站的 PHP 实现技术

6.1 数组函数

5.each()功能:返回数组中下一个元素的索引及值。语法: array each(array array)

<?

$zoo=array("horse","elephant","monkey");

$num=each($zoo);

?>

说明:这个例子返回 $num 的一对索引值,返回的数组包含有4 个元素,依次分别为 0 、 1 、索引和值,在此例中, 0=>0 , l=>'horse',key=>0,value='horse'.

Page 192: 网站的 PHP 实现技术

6.1 数组函数

6.current()功能:返回当前数组元素。语法: mixed current(array array)。说明:每一个数组变量都有一个内部指针,指向它的每一个元素。此函数简单地传回

数组元素中当前指到的数组内部指针。它不会改变指针的值,若数组指针指到内部指针表外,则传回 False 的值。另外,若函数中包括 0 和""值,也返回 False 值。

Page 193: 网站的 PHP 实现技术

6.1 数组函数 7 .next()

功能:指针指向当前元素后一个元素,并返回新的指针处的元素值。语法: mixedcurrentt(array array)。说明:如果没有后一个元素,则返回 False 值,如果该数组为空值,也返回False 值。

8.prev()功能:指针指向当前元素前一个元素,并返回新的指针处的元素值。语法: mlx~dprev(arrayarray) ;则返回 False 值,如果该数组为空值,也返回False 值。

说明:如果没有后一个元素,则返回False 值,如果该数组为空值,也返回False 值。

Page 194: 网站的 PHP 实现技术

6.2 日期和时间函数

日期和时间函数主要完成对时间进行的操作,在 PHP 网络编程中,应用非常广泛,主要是用来获取当前时间以及根据这个时间做一些判断,比如在 BBS论坛、留言簿中就会利用日期和时间函数来获取发帖和留言时间,以便以后查询或者用于其他用途。这里就几个比较常用的函数进行介绍。

Page 195: 网站的 PHP 实现技术

6.2 日期和时间函数

1 . checkdate()功能:验证日期 / 时间格式语法: int checkdate(int month, int day,int year)。说明:如果日期是有效的,则返回 True 值,否则返回 False值。

另外该函数的有效范围如下:年 0~ 32767年,月 1~ 12月,日随着月份及闰年变化而变化。

Page 196: 网站的 PHP 实现技术

6.2 日期和时间函数

2 . date()功能:生成日期 / 时间格式。语法: string date(string format,int[timesamp])

<? print(date("1 ds of F Y h:I:s A")); print("August 18,2000 is on a".date("1",mktine

(0,0,0,8,18,2000))); ?>

说明:返回值的字符串根据参数 format 设置的格式来确定。若有传入时间标记值,慢将时间标记格式化传回;若无传入时间标记值,则将当前服务器的时间格式化返回。字符串格式化的选项如下所示。

Page 197: 网站的 PHP 实现技术

6.2 日期和时间函数

a-“am” 或“ pm”

A- “AM” 或“ PM”

d- 几号,二位数字,若不足二位则前面补零;如:“ 01” 到“ 31”

D- 星期几, 3 个英文字母;如:“ Sat”

F- 月份,英文全名,如“ August”

h- 12小时制的小时,如:“ 01”至“ 12”

H- 12小时制的小时,如:“ 00”至“ 23”

g- 12小时制的小时,不足二位不补零;如:“ 1”至 12”

G- 24小时制的小时,不足二位不补零;如:“ 0”至“ 23”

Page 198: 网站的 PHP 实现技术

6.2 日期和时间函数

i- 分钟;如:“ 00”至“ 59”

j- 几日,二位数字,若不足二位不补零;如:“ 1”至“ 31” 1- 星期几,英文全名;如:“ Saturday'’m- 月份,二位数字,若不足二位则在前面补零;如:“ 01”至“ 12”

n- 月份,二位数字,若不足二位则不补零;如:“ 1”至“ 12'’M- 月份, 3 个英文字母;如:“ Jan'’s- 秒;如:“ 00‘’至“ 59”

S- 字尾加英文序数,两个英文字母;如:“ th”和“ nd'’

Page 199: 网站的 PHP 实现技术

6.2 日期和时间函数

t- 指定月份的天数;如:“ 28”至“ 31”

U- 总秒数 w- 数字型的星期几,如:“ 0”(星期日 )至“ 6”(星期六 ) Y- 年, 4位数字;如:“ 1999”

y- 年,二位数字;如:“ 99”

z- 一年中的第几天;如:“ 0”至“ 365”

Page 200: 网站的 PHP 实现技术

6.2 日期和时间函数

上面的例子运行结果如下: Friday 18thofAugust200009:25:39AM August 18,2000isOnaFriday 3 . time()

功能:返回当前时间信息。语法: int time(void)

Page 201: 网站的 PHP 实现技术

6.2 日期和时间函数

4 . getdate()功能:返回时间及日期的信息。语法: array getdate(int timestamp)

<? $cweekday=array(" 星期日 " , " 星期一 "," 星期二 "," 星期

三 "," 星期四 "," 星期五 "," 星期六 "); $cut_date=getdate(time()); $cur_wday=$eur_date['wday ']; $Gdate=date(" 北京时间 Y 年 m 月 d 日 H 时 i 分 s 秒 $cweekda

y[$cur_wday]"); echo $GDate; ?>

Page 202: 网站的 PHP 实现技术

6.2 日期和时间函数

说明:该函数返回的数组包括以下元素: seconds- 秒 minutes- 分 hours- 时 mday- 当月的第几天 wday- 当周的第几天数字 mon- 月份数字 year- 年,数字

Page 203: 网站的 PHP 实现技术

6.2 日期和时间函数

yday"- 当年的第几天数字;如:“ 299”

weekday- 星期几全名;如:“ Friday” month- 月份全名;如:“ January” 。

上例是 getdate(),time()和 date()3 个函数运用的一个例子,输出结果如下:

北京时间 2000年 08月 16日 09 时 44分 51秒星期三

Page 204: 网站的 PHP 实现技术

6.2 日期和时间函数

5 . Set_time_limit()功能:设定该页面最长的执行时间。语法: void set_time_limit(int seconds) ;说明:该函数用来规定从该句运行时起程序必须在指定秒数内运行结束,超时则程序 出错退出。默认值是 30秒,由 php.ini 文件中的 max execution time 变量设置,如果设置为0则不限定最长时间。当执行到该函数时,系统才开始计算。例如,若设定值是 30秒,而在执行到该函数前已执行了 25秒,而用该函数改为 20秒,则该页面最长执行时间为 45秒。

Page 205: 网站的 PHP 实现技术

6.3 目录文件系统函数

目录文件系统函数主要完成对目录和文件进行的操作,例如打开、关闭目录或文件以及读取、写入文件等等,常用的函数说明如下:

1 . chdir()功能:改变目录。语法: in chdir(string directory)。说明:该函数用来把当前 PHP 执行的目录转到新的 directory目录中。如果不能改变 则返回 False ,能则返回 True 。

2 . dir()功能:目录类别。

Page 206: 网站的 PHP 实现技术

6.3 目录文件系统函数

语法: new dir(stringdirectory) <?

$road=dir("/php");

echo "Handle:" . $road->handle."<br>\n";

echo "Path : ".$road->path."<br>\n";

while($hard=$road->read()){

echo $hard."<br>\n";

}

$road->closeO;

?>

Page 207: 网站的 PHP 实现技术

6.3 目录文件系统函数

说明:该函数的返回值相当于一个类的对象,用来读取目录。当目录参数 directory启动以后,具有两个属性: handle属性和 path属性,前者类似于其他函数所用的 readdir()、 rewinddir()及 closedir() ;后者则设定启动目录后的路径参数。本函数有 3 个方法: read 、 rewind 和 close 。

Page 208: 网站的 PHP 实现技术

6.3 目录文件系统函数

3 . opendir()功能:开启目录。语法: int opendir(string path)说明:返回的整数值是可供其他目录函数操作的 handle 。

4 . readdir()功能:读取目录。语法: string readdir (int dir_handle)说明:返回目录中的文件名称,读取不按照任何特定的顺序。

Page 209: 网站的 PHP 实现技术

6.3 目录文件系统函数

5 . closedir()功能:关闭目录。 语法: void closedir (int dir_handle)

<?

$handle=opendir('');

echo "目录 handle : $handle";

echo "<br>";

echo " 文件及文件夹: ";

echo "<br>";

Page 210: 网站的 PHP 实现技术

6.3 目录文件系统函数

while ($file=readdir($handle)){

echo "$tile";

echo "<br>";

}

closedir($handle);

?>

说明:上面的例子是以上 3 个函数的一个应用,用来列出当前目录下的所有文件和文件夹。

Page 211: 网站的 PHP 实现技术

6.3 目录文件系统函数

6 . fopen()功能:开启文件或者 URL 地址。语法: int fopen(string filename , string mode).

<?

$fp=fopen("/apache/htdocs/file.txt","r");

$fp=fopen("c:\\programfiles\\mywork.txt","r");

$fp=fopen("ftp://user:[email protected]/","w");

$fp=fopen("http://www.phpuser.com/","r");

?>

Page 212: 网站的 PHP 实现技术

6.3 目录文件系统函数

说明:该函数有两个参数,第一个为将要打开的文件,第二个为打开模式。打开模式有如下几种:

“r” 打开方式为只读,文件指针指到文件开始处。“r+” 打开方式为可读写,文件指针指到文件开始处。“w” 打开方式为写入,文件指针指到文件开始处,并将原文件的长度设为 0 。若文件不存在,则建立新文件。“w+” 打开方式为可读写,文件指针指到文件开始处,并将原文件的长度设为 0 。若文件不存在,则建立新文件。

Page 213: 网站的 PHP 实现技术

6.3 目录文件系统函数

“a” 打开方式为写入,文件指针指到文件最后。若文件不存在,则建立新文件。“a+” 打开方式为可读写,文件指针指到文件最后。若文件不存在,则建立新文件。“b” 若操作系统的文字及二进位档不同,则可用该参数, UNIX 系统中不需要使用该参数。

上例中的第一个表达式在 UNIX中使用,第二个在 WINDOWS系统中使用,第三、 四个是对 URL进行操作。

Page 214: 网站的 PHP 实现技术

6.3 目录文件系统函数

7. fclose()

功能:关闭文件。语法: int fclose (int fp)说明:该函数用来关闭已经打开的文件的指针 fp 。如果成功则返回 True ,失败则返回 False 。其中的文件指针必须是有效的,而且必须是已经用 fopen()或 fsockopen()成功打开的指针。

Page 215: 网站的 PHP 实现技术

6.3 目录文件系统函数

8 . fgets()功能:逐行读取内容。语法: string fgets(int fp, int lengh)

<?

$ft=fopen("c:/apache/htdocs/myfile.txt","r");

while($buffer=fgets($ft,2000)){

echo $buffer;

}

fclose($ft);

?>

Page 216: 网站的 PHP 实现技术

6.3 目录文件系统函数

说明:该函数取得文件所指的行,返回字符串的长度为行的长度减一。若发生错误则传回 False 。其中的文件指标必须是有效的,且必须是已经用 fopen()、 popen()或 fockopen() 成功打开的文件指针。

Page 217: 网站的 PHP 实现技术

6.3 目录文件系统函数

fgetss()功能:读取文件的一行或直到最大长度 (类似于 fgets),但去掉所有的 HTML 和 PHP 标记。语法: string fgetss(int fp, int length).

10 . file()功能:将整个文件读入一个数组变量中。 语法: array file(string filename)说明:本函数与 readfile()类似,不同的地方为本函数将文件全部读出,并输出到数组的变量中,每行都是一个独立的数组元素。

Page 218: 网站的 PHP 实现技术

作业九 1 、 

简述网站的 PHP 实现技术的特点以及 PHP 的功能特点。2 、  简述 PHP 的最佳组合及运行环境。3 、  简述 PHP访问数据库的机制。4 、  试比较 PHP 与其它的网站实现技术。5、  要在主页中嵌入 PHP ,一般有哪几种方法?6、  PHP引用文件的方法有哪两种?7、  简述 PHP 的三种基本的流程结构。 实践题一:在 Windows 2000 下安装配置 Apache 、 MySql 和 PHP 。 实践题二:用 PHP 实现一个动态图形生成程序。