1、PHP 编程基础与实例教程实验指导书PHP 编程基础与实例教程 实验指导书1 预备实验 架设 Windows 下的 PHP 开发测试服务器0. 实验准备0.1 系统环境和 PHP 相关软件、开发工具 操作系统:WindowX(Windows95/98/me/XP/NT 系列 /2000 系列/2003)具体到的机房环境,请在 Windowsxp 环境下做 Web 服务器:Apache 2.0.63 (压缩包文件:apache_2.0.63-win32.exe) PHP:PHP5.2.11 (压缩包文件:php-5.2.11-Win32.zip) 数据库:MySQL 5.1.39 (压缩包文件:
2、mysql-essential-5.1.39-win32.zip) 脚本编辑器:EditPlus(已安装好):图形化编辑环境,速度慢,功能多,常用于复杂网页设计注: PHP 相关软件、开发工具的获得:在我的 ftp 上下载0.2 实验目的能够快速部署 Windows 下的开发测试服务器环境,以满足同学们在宿舍、家中自己机器上学习、研究和开发 PHP 程序设计的需要或是实际工作的需要。0.3 实验中的路径说明为说明问题的简单起见,路径为比较简单的示例路径,但已经过测试。实际运用时,路径完全可根据自己需要设定。1. PHP 的安装和配置1.1 安装 下载 PHP-5.2.5-Win32.ZIP 软
3、件包,不需要安装,在 C 盘根目录下建立文件夹 C:php 。将软件包解压缩到本目录下。 在 C:php 目录下找到 php.ini-dist 文件,将其名字改为 php.ini ,这是 php 的配置文件。 修改 php.ini 文件,过程如下:(1) 找到 extension_dir=”./” ,改为 extension_dir=”C:/php/ext” (2) 找到 “ ;extension=php_mbstring.dll ”去掉前面的“;”(3) 找到 “ ;extension=php_mysql.dll ” 去掉前面的“;”(4) 找到 “ ;extension=php_mysql
4、i.dll ” 去掉前面的“;” 修改完 php.ini 文件后,保存该文件,并复制到 C:Windows 目录下。 将 C:PHPlibmysql.dll 复制到 C:windowssystem32 目录下注: 操作系统安装目录,具体位置见表 1PHP 编程基础与实例教程 实验指导书2 表 1:操作系统安装目录操作系统 操作系统安装目录Windows95 windowsWindows98 windowsWindows me windowswindowsWindows NT 系列 winntWindows 2000 系列 winntWindows 2003 windows1.2 配置通过修改
5、php.ini 中的参数来实现。对 MySQL 而言,若无特殊要求,一般无须配置。因为 PHP 在 php.ini中已经做好了对 MySQL 的配置,所以一般无须修改。2. Apache 的安装和配置2.1 安装软件双击 apache_2.0.63-win32.exe,按照提示,选择 custom 安装方式,然后一路默认,即完成安装。注意:如果您的电脑安装了 IIS,请先到控制面板关闭 IIS 服务,因为 IIS 服务器与 Apache 服务器都使用一个端口。2.2 配置服务单击开始-程序 - Apache HTTP Server 2.2- Configure Apache Server- E
6、dit the Apache httpd.conf configuration File,打开 Apache 的配置文件 httpd.conf,按表 2 提示进行配置:注意:每处的配置要想起作用,必须将行首的#号(注释符号)去掉;表示一个或多个空格表 2 Apache 配置序号 参数名和示例参数值 配置方法 说明 BindAddress(你所用机器的 IP 地址) 修改 地址绑定(指定服务器地址) LoadModulephp5_modulec:/php/sapi/php5apache.dll 添加 将 PHP 配置为 Apache 的模块(Apache module)方式 Port80 修改
7、指定端口 ServerAdmin(你的邮箱地址,如 ) 修改 指明管理员信箱 ServerNamessl 修改 指明主机名称 DocumentRoot“d:Websitehtdocs“ 修改 Web 文档发布主目录 修改 该处目录应与 Web 文档发布主目录一致 ScriptAlias/php/“c:/php/“ AddTypeapplication/x-httpd-php.php Actionapplication/x-httpd-php“/php/php.exe“ 添加 指明脚本路径指明 PHP 脚本扩展名指明 PHP 脚本解释器程序名 DirectoryIndexindex.htmind
8、ex.php 修改 指定默认文档*描述以 httpd.conf 文件的行文顺序进行*表中路径、地址、主机名、信箱等,实际配置时请根据自己情况进行按表 1 所述,参考 Apache 配置文件样本,修改完毕后,保存。PHP 编程基础与实例教程 实验指导书3 测试配置是否成功。1)在编辑完成后,我们还可以通过 “开始/ 程序/Apache HTTP Server 2.2/Configure Apache Server/Test Configuration“来测试配置文件是否有语法错误等。2)或者打开浏览器敲入:http:/lo calhost 能否见到服务器到测试页面。能见到则配置成功。3. Apa
9、che : Web 服务的安装和启动(1)启动 Apache 服务:单击:开始- 程序- Apache HTTP Server 2.2- Control Apache service- Start。(默认情况下,每次操作系统启动时自动启动该服务,可更改)4. 测试 Apache 服务器对 PHP 的支持能力测试目的:检验配置后的 Apache 服务器是否提供了对 PHP 脚本的解释能力(支持 PHP)用 EditPlus 编写测试脚本,存为 d:Websitehtdocsceshi.php,内容为:说明:phpinfo()是 PHP 内置函数,用来显示 PHP 和 Apache 配置信息,在浏
10、览器中敲入http:/localhost/ceshi.php,回车后若显示类似图 1 的 PHP 配置页面(以 Winxp 下为例) ,则说明你的Apache 服务器已经支持 PHP 脚本,能够解释 PHP 脚本了;若不显示类似画面,则配置有误,此时你的Apache 不能够解释 PHP 脚本,需重新配置。图 15. MySQL 的安装和启动数据库服务器将 mysql-essential-5.1.39-win32.zip 解压缩后,双击 setup.exe,按照提示,选择 custom 安装方式,然后一路默认,遇到输入密码的地方,输入 123 作为密码。测试安装是否成功。单击“开始” ,选择“M
11、ySQLMySQL Server5.1MySQL Command Line Client”,会出现如下图所示的窗口,然后输入 root 密码,根据提示操作即可PHP 编程基础与实例教程 实验指导书4 6. 测试 PHP 与 MySQL 的协同PHP 方面:准备测试脚本 connect.php,存放在 d:Websitehtdocs 下,其内容为:程序 2-13:; MYSQL_SELECT_DB(TEST)OR DIE(不能选择数据库); ECHO 连接 TEST 数据库已经成功;?(1)测试步骤在浏览器地址栏输入:http:/localhost/connect.php,回车,显示如图 2 所
12、示,则表明 PHP 与 MySQL 能够协同工作了。图 2PHP 编程基础与实例教程 实验指导书5 实验一 PHP 基本语法实验0 实验准备0.1 实验环境和相关工具软件具体到的机房环境,请在 Windowsxp 环境下做本实验: 操作系统:Windowsxp Web 服务器:Apache 2.0.63 默认发布文档路径:c:Apachehtdocs PHP:PHP5.2.11 安装路径:c:php 数据库:MySQL 5.1.39 使用默认路径 脚本编辑器:记事本或EditPlus-v3.11.463H或Macromedia Dreamweaver MX 中文版注意:使用以上脚本编辑器,若要
13、保存为.php 文件,必须在保存时指明扩展名为.php尤其是记事本,必须在保存时,单击“保存类型”下拉框,选择“所有文件(*.*)”类型,然后指定文件扩展名是.php,单击“保存”按钮后,保存的文件才能保证是.php 文件。常见错误是直接保存,导致保存的文件其实是文本文件,如 abc.php.txt 等以.txt 为扩展名的文本文件。0.2 实验目的和内容实验目的:熟练掌握 PHP 语言的基础语法实验内容:从 7 个方面完成 PHP 基本语法实际体验,分列如下:一、词法结构 大小写 语句和分号 注释 标识符二、数据类型 字符串型 布尔型 数组型 对象型 资源型 各种数据类型的检测三、变量 变量
14、的变量 变量的作用域PHP 编程基础与实例教程 实验指导书6 垃圾收集:变量的内存管理四、表达式和操作符 隐式类型转换 字符串连接操作符 自增和自减操作符 类型转换操作符 其他操作符五、流控制语句 if 语句 switch 语句 while 语句 for 语句 foreach 语句 exit 语句 return 语句(2-12)六、包含代码七、在 Web 页面中嵌入 PHP0.3 实验中的约定所有实验程序均与讲义中的例子相对应,如程序 1-1.php,对应讲义中的例子例 1-1。1 词法结构1.1 大小写敏感预备知识 变量区分大小写,内置结构(while,for,if 等)及关键字(echo,
15、class 等)不区分大小写【2-1】大小写敏感的例子PHP 程序 2-1 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)注意:要使运行结果达到真正分行(和 HTML 输出一致) ,请将程序 2-1 中的n 换成 ,即可实现,如下例【2-1br】修改程序 2-1 后的程序 2-1br,直接实现分行(将程序 2-1 中的n 换成)PHP 编程基础与实例教程 实验指导书7 PHP 程序 2-1br 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)“;ECHO “$NAME=$NAME“:EcHo “$NaME=$NaME“;?原因:浏览器不解释(或者说不识
16、别,或忽略)经 PHP 解释n 而成的空白换行,只有遇到 这个HTML 中的换行标记,才解释成换行。为了直接达到预期换行效果,将不再使用 n,而是使用1.2 语句和分号预备知识 简单语句 复杂语句 分号的省略【2-2】语句和分号PHP 程序 2-2 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)“; /简单语句echo “$a 的值等于$b 的值 “;/上面部分为复杂语句echo “hello,world“; /此处分号可省略?1.3 注释预备知识 在必要的地方做注释 注释的形式及各自的适用处:Shell 形式(#) 、C+形式(/)、C 形式(/* */)【2-6】C
17、形式的注释作用PHP 程序 2-6 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)PHP 编程基础与实例教程 实验指导书8 Some stuff you want to be HTML.Now this is regular HTML1.4 标识符(常量标识符)预备知识 使用 define()设置常量标识符【2-7】使用 define()设置常量标识符PHP 程序 2-7 送到用户浏览器解释后显示的结果(运行结果,显示在浏览 显示在浏览器页面中的结果)2 数据类型2.1 字符串预备知识 字符串的表示 单引号和双引号在字符转义上的不同作用:单引号仅转义反斜杠和单引号【2-8
18、】单引号和双引号在字符转义上的不同作用PHP 程序 2-8 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)”; echo Hi,$name;/单引号中的变量名将被输出,因为单引号不认为$name 是变量?注意:双引号中的变量,若前面不加反斜杠进行转义(将$原样输出) ,则在输出字串的时候将输出变量中的值【2-9】单引号仅支持的字符转义:反斜杠 和单引号PHP 编程基础与实例教程 实验指导书9 PHP 程序 2-9 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)2.2 布尔型预备知识PHP 中为 false 值的情况【2-10】判断布尔值PHP 程序
19、2-10 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果);if(!$x) echo $x 有一个 false 值;if($y) echo $y 有一个 true 值 ;if(!$y) echo $y 有一个 false 值;?2.3 数组型预备知识:数组的创建、遍历;键名:数组元素的下标名称,一般是从 0 开始的整数,也可以是字符串;键值:数组元素中存储的值【2-11】数组的创建、遍历:发明家记录PHP 程序 2-11 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)Edison,Rotary Engine=Wankel,Toilet=Crapper)
20、;*/#遍历数组$person,显示其内容foreach($person as $name)/访问每个键echo “Hello,$name”;#遍历数组$creator,显示其内容foreach($creator as $invention=$inventor) echo “$invention was created by $inventor”;?2.4 对象型预备知识类:OOP 的单元,是包含属性(变量)和方法(函数)的结构定义类的定义对象的创建、引用其属性和方法【2-12】类和对象的简单例子PHP 程序 2-12 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)nam
21、e=$newname;return $this-name;$ed=new Person;$ed-name(Edison);printf(“Hello,%s”,$ed-name);$tc=new Person;$tc-name(Crapper);printf(“Look out below,%s”,$tc-name);?2.5 数据类型的检测预备知识数据类型检测函数【2-14】数据类型检测PHP 程序 2-14 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)PHP 编程基础与实例教程 实验指导书11 3 变量3.1 变量的变量预备知识变量的概念和作用;变量的声明和使用;变量
22、的变量【2-15】PHP 变量无类型检查,无须声明,类型随用随变PHP 程序 2-15 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)“;if(is_string($what) echo “$what 是字符串型变量“;$what=35;echo “$what 的值=$what“;if(is_int($what) echo “$what 是整型变量“;$what=array(Fred,35,wilma);echo “$what 的值为:“;foreach($what as $e)echo “$e“;if(is_array($what) echo “$what 是数组型变量
23、“;?【2-16】空变量的例子PHP 程序 2-16 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)PHP 编程基础与实例教程 实验指导书12 【2-17】变量的变量PHP 程序 2-17 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)“;echo “所以 $r=$r“;echo “又因为 $r=“.$r.“;echo 故 $r=.$r;echo “:-)你明白了吗 ?“;?3.2 变量的作用域预备知识变量按其作用域分为:局部变量、全局变量。静态变量、函数的参数属于局部变量;从局部访问全局变量的方法;从全局访问局部变量的方法【2-19】不能从全局(函
24、数外部)直接访问局部变量PHP 程序 2-19 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)【2-20】从局部访问全局变量,方法 1:使用 global 关键字声明PHP 程序 2-20 送到用户浏览器解释后显示的结果(运行结PHP 编程基础与实例教程 实验指导书13 果,显示在浏览器页面中的结果)【2-21】从局部访问全局变量,方法 2:引用全局变量数组$GLOBALSPHP 程序 2-21 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)【2-22】使用静态变量的好处 ::使全局可间接访问到PHP 程序 2-22 送到用户浏览器解释后显示的结果(
25、运行结果,显示在浏览器页面中的结果)“;$counter=10;/这个 $counter 是全局的变量update_counter();update_counter();echo “全局变量$counter 这时的值=$counter“;?【2-23】全局不可直接访问局部变量(可通过将局部变量声明为静态的方法,参见 2-22)PHP 程序 2-23 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)PHP 编程基础与实例教程 实验指导书14 “;greet(“孙寿龙“);if($name=null)echo $name 是一个空变量,访问不到!;?3.3 垃圾收集预备知识无用
26、变量的收回;PHP 内存管理;引用计算;写时复制【2-24】PHP 的写时复制PHP 程序 2-24“;echo “新数组 $other 的内容: “;foreach($other as $a)echo “$a“;echo “新数组 $worker 的内容:“;foreach($worker as $b)echo “$b“;echo “是不是很好玩?“;?PHP 解释结果(HTML 输出)(右键单击该页面,在快捷菜单中单击“查看源文件”命令可看到)PHP 编程基础与实例教程 实验指导书15 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)【2-25】垃圾收集:变量的回收 使
27、用 unset()回收变量(释放变量)PHP 程序 2-25 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)PHP 编程基础与实例教程 实验指导书16 “;$s1=isset($name);/$s1 为 falseif($s1) echo “$name 已存在,其值=$name“;else echo “$name 不存在,其值=$name“;$name=“Fred“;$s1=isset($name);/$s1 为 trueif($s1) echo “$name 已存在,其值=$name“;else echo “$name 不存在,其值=$name“;echo “现在从内存
28、中释放( 删除)$name:“;unset($name);$s1=isset($name);/$s1 为 falseif($s1) echo “$name 已存在,其值=$name“;else echo “$name 不存在,其值=$name“;?4. 表达式和操作符4.1 隐式类型转换预备知识 数字间进行字符串拼接的规则;字符串转换数字后的数字值规则【2-26】数字间进行字符串拼接的规则:数字首先变为字串,然后再拼接PHP 程序 2-26 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)【2-27】字符串转换数字后的数字值规则假定以数字开始,该数字即为转换后的数字值;若未
29、找到数字则转换后的数字值为 0;若开头的数字包含一个句点或大写或小写的 E,则转换后的数字值为浮点型PHP 程序 2-27 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)PHP 编程基础与实例教程 实验指导书17 “;echo “$b=$b“;echo “$c=$c“;echo “$d=$d“;?4.2 字符串连接操作符预备知识 字符串连接操作符;数字与字串连接时,数字先转换成字串【2-28】数字在与字符串连接时,先自动变成字符串PHP 程序 2-28 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)类似的,如 2-29:【2-29】和 2-28 差不
30、多的程序PHP 程序 2-29 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)4.3 自增自减操作符预备知识 PHP 编程基础与实例教程 实验指导书18 数字的自增自减(按数字顺序) ;字母的自增自减(按字母顺序)【2-30】PHP 程序 2-30 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)“;$a=“a“;while($a“;echo “大写字母自增:“; $a=“A“;while($a“;? 请编程验证:字符串 字符串+abzaspazspbaK9L04243(该图显示的是部分结果)4.4 类型转换操作符预备知识 类型转换操作符;类型转换的临
31、时性;类型转换的真正实现【2-31】类型转换的临时性PHP 程序 2-31 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)【2-32】类型转换的真正实现PHP 程序 2-32 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)PHP 编程基础与实例教程 实验指导书19 “;$a=(int)$a;if(is_int($a) echo “转换类型并自赋值后,$a 是整型,值为:$a“;?4.5 其他操作符预备知识 错误抑制操作符(例子程序见 2-13) ;三元操作符【2-33】三元操作符PHP 程序 2-33 送到用户浏览器解释后显示的结果(运行结果,显示在
32、浏览器页面中的结果)“;echo $a$b?$a$b:$a5.流控制语句5.1 if 语句预备知识 if 结构、if-else 结构、if-else 链接(层进) 、if-elseif 结构、if-else-endif 结构【2-34】使用 if-else-endif 结构PHP 程序 2-34 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)“;$user_validated=true;if($user_validated)echo “欢迎你 !“;$greed=1;else echo “对不起,禁止访问 !“;exit;echo “还可使用 PHP 提供的另一种方式:i
33、f-endif 结构“;$user_validated=“;PHP 编程基础与实例教程 实验指导书20 if($user_validated): /注意冒号echo “欢迎你 !“;$greed=1;else:/注意冒号echo “对不起,禁止访问 !“;exit;endif; /句尾是分号,不是冒号?【2-35】if 语句的使用 :嵌入到 HTML 中(表单验证)PHP 程序 2-35 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)欢迎你 :请重新登陆!【2-36】if 语句的链接 (层进)(使用 if-else 结构)PHP 程序 2-36 送到用户浏览器解释后显示的
34、结果(运行结果,显示在浏览器页面中的结果)90)print(“优秀“);elseif($fenshu80$fenshu=61;echo “你的分数是:$fenshu,属于:“;if($fenshu90)print(“优秀“);elseif($fenshu80?60) echo “及格“;else echo “不及格“;?用三元操作符简化使更简洁的例子见 2-39【2-39】用三元操作符简化使 2-38 更简洁的例子PHP 程序 2-39 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)“;?“.($fenshu60?“及格“:“不及格“).“; ?进一步的拼接字串的例子见程
35、序 2-39a.php【2-39a 】用三元操作符简化使 2-39 更简洁的例子PHP 编程基础与实例教程 实验指导书22 PHP 程序 2-39a“;echo “.($fenshu60?“及格“:“不及格“).“;?PHP 解释结果(HTML 输出)(右键单击该页面,在快捷菜单中单击“查看源文件”命令可看到)送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)5.2 switch 语句预备知识 switch 的 C 语言形式、switch-endswitch 结构、switch 语句中 case 的合并【2-40】switch-endswith 结构的用法PHP 程序 2-4
36、0 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)【2-41】case 的合并PHP 编程基础与实例教程 实验指导书23 PHP 程序 2-41 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)5.3 while 语句预备知识 while 的 C 语言形式(传统 while()等结构) 、while-endwhile 结构【2-42】PHP 程序 2-42 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)【2-43】while-endwhile 循环PHP 程序 2-43 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中
37、的结果)PHP 编程基础与实例教程 实验指导书24 5.4 for 语句预备知识 fo 循环的 C 语言形式(传统 for()等结构)、for-endfor 结构【2-44】for 循环中多表达式应用PHP 程序 2-44 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)“;echo “使用 for 结构,计算结果是: $total=1+2+4+8+.+512=$total“;?【2-45】for 循环的死循环的一个例子(因死机,效果图略)PHP 程序 2-45“;?5.5 foreach 语句预备知识 foreach()语句;foreach-endforeach 语句;
38、循环体中对数组元素的遍历:访问每个键,访问每个键和键值实验程序见:程序 2-115.6 exit 语句预备知识 exit 语句的作用;使用形式实验程序见:程序 2-135.7 return 语句预备知识 return 语句的作用;使用形式实验程序见:程序 2-126.在页面中嵌入 PHP预备知识PHP 编程基础与实例教程 实验指导书25 PHP 嵌入 Web 页面中的几种形式;各自的适用场合【2-49】PHP 代码以 xml 形式嵌入 HTMLPHP 程序 2-49 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)this is my first PHP programLook,it is my first PHP program.How cool is that?【2-50】PHP 代码可放在 HTML 标签内部PHP 程序 2-50 送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)“