《PHP 网站开发案例教程》习题答案
习题 1 答案
1.1 简述 PHP 语言有哪些主要特点。
答:PHP 语言有以下主要特点:
开放性源代码;运行于服务器端;跨平台性;语言简单易学;执行效率高;图像处理功能;数据库访问功能;面向对象编程;可伸缩性。
1.2 Apache 服务器只支持 PHP 语言吗?
答:不是。Apache 服务器支持多种 Web 编程语言,例如 ASP、JSP 以及 PHP 等。
1.3 简述 MySQL 有哪些主要特点。
答:MySQL 有以下主要特点:快速、可靠、易于使用;工作在客户端/服务器模式下或
嵌入式系统中;真正的多线程;跨平台性;数据类型丰富;安全性好;处理大型数据库;连接性好。
1.4 把左边的项与右边的描述联系起来(即把适当的字母填入括号内)。
A. httpd.conf (D)用于创建虚拟目录;
B. Listen (E)用于设置默认文档;
C. DocumentRoot (B)用于设置 Apache 监听的 IP 地址和端口;
D. Alias (C)用于设置网站文档的根目录;
E. DirectoryIndex (A)用于保存 Apache 服务器的配置信息。
1.5 管理 Apache 服务器有哪些方法?
答:管理 Apache 服务器有以下方法:(1)左键单击 Windows 系统托盘中的图标,从菜单中选择所需要的命令;(2)双击 Windows 系统托盘中的图标,打开 Apache 服务器监
视器;(3)使用 Windows 的服务管理工具。
1.6 把左边的项与右边的描述联系起来(即把适当的字母填入括号内)。
A. php.ini (D)用于设置服务器的默认时区;
B. extension_dir (C)用于设置保存会话信息的目录;
C. session.save_path (B)用于设置动态模块的加载路径;
D. date.timezone (A)用于保存 PHP 的配置信息。
1.7 在 Apache 中,PHP 有哪两种运行方式?如何让 Apache 支持这些运行方式?
答:(1)在 Apache 中,PHP 的运行方式有 CGI 二进制文件方式和 DLL 动态链接库模块方式。(2)要让 Apache支持 CGI二进制文件方式,需要在 httpd.conf文件末尾添加以下代码:
ScriptAlias /php/ "F:/php/"
AddType application/xhttpdphp
.php
Action application/xhttpdphp
"/php/phpcgi.
exe"
(3)要让 Apache支持 DLL动态链接库模块方式,首先要把 PHP 安装目录中的
php5ts.dll
文件复制到Windows 系统的 system32 文件夹中,然后在 httpd.conf 文件末尾添加以下代
·2·
LoadModule php5_module "F:/php/php5apache2_2.dll"
AddType application/xhttpdphp
.php
1.8 配置 MySQL 服务器时可以设置一个管理员账号,其名称是(C)。
A. admin
B. sa
C. root
D. system
1.9 要想通过 PHP 连接到 MySQL 服务器,需要做哪些事情?
答:要想通过 PHP 连接到 MySQL 服务器,需要做以下事情。
(1)将 PHP 目录下的 libmysql.dll 文件复制到 F:\Apache2.2\bin 目录中。
(2)用记事本程序打开 F:\Apache2.2 目录中的 php.ini 文件。
(3)在文件中定位到[MySQL]节,然后对以下属性进行设置。
●设置 MySQL 服务器的主机名,代码为:
mysql.default_host = localhost
●设置 MySQL 服务器的端口号,代码为:
mysql.default_port = 3306
●设置默认用户,代码为:
mysql.default_user = root
●设置默认密码,代码为:
mysql.default_password = password
(4)为了启用 PHP 对 MySQL 的支持模块,在文件中定位到下面一行:
? extension = php_mysql.dll
移除前面的分号。
1.10 简述用 Dreamweaver 创建 PHP 动态站点的主要步骤。
答:用 Dreamweaver 创建 PHP 动态站点的主要步骤包括:创建本地文件夹;设置虚拟目录;设置站点的名称和 HTTP 地址;选择 PHP MySQL 服务器技术;设置站点文件使用方式(在本地进行编辑和测试);设置并测试 URL 前缀。
·3·
习题 2 答案
2.1 PHP 定界符有哪些形式?
答:P HP 定界符有以下 4 种形式:< ?php…?>;< ?…?>;< script language="php">…;
<%…%>。
2.2 在 PHP 中,有哪些标量数据类型?
答:在 PHP 中,标量数据类型有:布尔型(boolean)、整型数(integer)、浮点数(float)和字符串(string)。
2.3 在 PHP 中,字符串有哪些表示形式?各有什么特点?
答:在 PHP 中,字符串有以下三种表示形式:用单引号表示;用双引号表示;用定界符
表示。
(1)用单引号表示时,若要表示一个单引号,需要用反斜线(\)转义,即表示为“\'”;若要在单引号之前或字符串结尾需要出现一个反斜线,则需要用两个反斜线(\\)表示;在单引号字符串中出现的变量不会被变量值替代,转义序列也不会被解释。
(2)用单引号表示时,可以处理更多特殊字符的转义序列。在用双引号定义的字符串中,变量名会被变量值替代。
(3)用定界符表示时,在字符串中包含的变量名运行时将被变量值替代。在这种字符串中,可以直接包含单引号和双引号,而不必进行转义。
2.4 当从布尔值转换为整型时,true 转换为 1,false 转换为 0。
2.5 当把布尔值转换为字符串时,true 转换为字符串"1",false 转换为空字符串""。
2.6 要测试一个变量的数据类型,有哪些方法?
答:要测试一个变量的数据类型,可以使用 gettype()函数。
2.7 empty()函数用于检查一个变量是否为空;isset()函数用于检测变量是否设置。
2.8 什么叫可变变量?用什么符号来引用变量?
答:若一个变量的名称可以使用一个变量的值来表示,则这个变量就是可变变量。若要
引用一个变量,可在该变量名前面加一个&符号。
2.9 $x++与++$x 有什么不同?试举例说明。
答:$x++是先引用,后加一;++$x 是先加一,后引用。例如:
$x = 1 ?
$y = $x++ ? // 执行前,$x 为 1;执行后,$y 为 1,$x 为 2
$y = ++$x ? // 执行前,$x 为 2;执行后,$y 为 3,$x 为 3
2.10 简述条件运算符(? : )的运算规则。
答:条件表达式 (expr1) ? (expr2) : (expr3) 的值按照以下规则计算:当表达式 expr1 的值
为 true 时,条件表达式的值为 expr2;在 expr1 求值为 false 时,条件表达式的值为expr3。
2.11 在“$x = $a + $b?”中有哪些表达式?
答:其中有三个表达式:$x,$a + $b,$x = $a + $b
·4·
习题 3 答案
3.1 创建数组有哪些方法?试举例说明。
答:创建数组有以下两种方法。
(1)用语言结构 array()创建数组。例如:
$a = array ( "username => "tim", "gender" => "male", "birthdate" => "198888"
) ?
(2)用方括号语法创建数组。例如:
$a[0]["username"] = 'tina' ?
$a[0]["gender"] = 'female' ?
$a[1]["username"] = 'tom' ?
$a[1]["gender"] = 'male' ?
3.2 PHP 提供了哪些预定义数组?
答:P HP 提供了以下预定义数组:$ GLOBALS、$ _SERVER、$ _GET、$ _POST、$ _COOKIE、$_REQUEST、$_FILES、$_SESSION。
3.3 在 PHP 函数中,按值传递参数与通过引用传递参数有什么区别?
答:若函数参数通过值传递,则当在函数内部改变参数的值时,不会改变函数外部的值。若函数参数通过引用传递,则可以在函数内部修改它的参数值。若要函数的一个参数通过引用传递,则可以在函数定义中该参数的前面预先加上引用符号“&”。
3.4 函数的返回值通过 return 语句设置。
3.5 什么叫局部变量?要在一个函数内部引用全局变量有哪些方法?
答:在用户自定义函数内部定义的变量称为局部变量。要在一个函数内部引用全局变量
有以下两种方法:
(1)先用 global 关键字来声明全局变量,然后对全局变量进行访问。
(2)在函数内部,也可以直接通过预定义数组$GLOBALS 来访问全局变量。
3.6 静态变量使用关键字 static 来声明,静态变量的特点是:仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。
3.7 在 PHP 中,如何设置时区?
答:在 PHP 设置时区有以下两种方法:
(1)在 php.ini 中设置 date.timezone 选项。例如:date.timezone = PRC
(2)通过内部函数 date_default_timezone_set()来设置用于一个脚本中所有日期时间函数
的默认时区。
3.8 若要显示“xxxx 年 xx 月 xx 日星期 x xx:xx:xx”,应如何设置 date()函数的格式
字符串?
答:可使用格式字符串“Y 年 n月 j 日 {$d} G:i:s”,其中变量$d表示中文星期名称。·5·
习题 4 答案
4.1 printf()函数与 sprintf()函数有哪些共同点?有哪些不同点?
答:共同点:它们都可以对字符串进行格式化,而且所有格式字符串相同;不同点:p rintf()
函数输出经过格式化处理的字符串,而 sprintf 返回经过格式化处理的字符串。
4.2 试把下列左边的函数与右边的描述联系起来(把适当的字母填到括号内)。
A. strtolower() (Q)从一个字符串中查找另一个字符串首次出现的位置。
B. strtoupper() (O)使用一个字符串分割另一个字符串并返回数组。
C. ucfirst() (N)将数组元素连接成一个字符串并返回该字符串。
D. ucword() (P)把一个字符串按照另一个字符串的值分割成若干个字符串。
E. trim() (L)在字符串的某些字符前面添加上反斜线。
F. ltrim() (K)从字符串中去除所有 PHP 和 HTML 标记。
G. rtrim() (I)把字符串中的一些 HTML 标签转换为 HTML 实体。
H. nl2br() (J)把字符串中的一些特殊字符替换为 HTML 实体。
I. htmlspecialchars() (H)把字符串中的所有换行符转换为 HTML 换行标记。
J. htmlentities() (G)去除字符串右边的空格或其他字符并返回处理后的字符串。
K. strip_tags() (F)去除字符串左边的空格或其他字符并返回处理后的字符串。
L. addslashes() (E)去除字符串开始位置和结束位置的空格或其他字符。
M. stripslashes() (D)把一个字符串中所有单词的首字母都转换为大写形式。
N. implode() (C)把一个字符串中的首字母转换为大写形式。
O. explode() (B)把一个字符串中的所有字母都转换为大写形式。
P. strtok() (A)把一个字符串中的所有字母都转换为小写形式。
Q. strpos() (M)去除字符串中的反斜线。
4.3 按显示结果的要求在下面的横线上填写适当的内容:
$search = array ( "他" , "JSP" , "动态网页设计" )?
$replace = array ( "我" , "PHP" , "动态网站开发" )?
$subject = "他喜欢 JSP 动态网页设计。"?
print str_replace ( $search, $replace, $subject ) . "
\n"? // 显示:我喜欢PHP 动态网
站开发。
print substr_replace ( $subject, "JSP" , 6 , 3 ) . "
\n"? // 显示:他喜欢JSP 动态网页设
计。
print substr ( "ABCDEF", 1 , 3 ) . "
\n"? // 显示:BCD
print substr ( "ABCDEF", 0 , 6 ) . "
\n"? // 显示:ABCDEF
print substr ( "ABCDEF", 3 , 2 ) . "
\n"? // 显示:DE
print substr ( "ABCDEF", 2
) . "
\n"? // 显示:EF
4.4 什么是正则表达式?它由哪两种类型的字符组成?
答:正则表达式是从左向右去匹配目标字符串的一组模式,它由普通字符和元字符组成。
4.5 Perl 兼容正则表达式与 POSIX 扩展正则表达式有什么区别?
答:Perl 兼容正则表达式应被包含在定界符中,通常使用正斜线(/)作为定界符。POSIX ·6·
扩展正则表达式则不需要定界符。
4.6 根据下列要求写出正则表达式。
(1)匹配电子邮件地址:\w+([+.]\
w+)*@\w+([.]\
w+)*\.\w+([.]\
w+)*;
(2)匹配中国居民身份证号:\d{15}|\d{18};
4.7 写出下列语句的执行结果。( 1 )
print preg_match ( "/([\x81\
xfe][\x40\
xfe]){2,}/", "韦小宝" )?
4.8 写出下列语句的执行结果。(20070622)
$pattern = "([09]{
1,2})/([09]{
1,2})/([09]{
4})"?
ereg ( $pattern, "22/06/2007", $regs )?
print "$regs[3]$
regs[2]$
regs[1]\n"?
4.9 在函数调用 preg_replace("/(\d+)\/(\d+)\/(\d+)/", "\$3\$
1\$
2", "6/22/2007" )中,第二
个参数中使用了逆向引用,其中$1 表示 6 ,$2 表示 22 ,$3 表示 2007 。
4.10 试在下列横线上填写适当的内容,以便把字符串分割成字符。
$chars = preg_split ( "//" , "PHP" , 1
, PREG_SPLIT_NO_EMPTY ) ?
·7·
习题 5 答案
5.1 在