Linux实用教程
刘兵 吴煜煌等编著
第 7章 Web应用服务
本章学习目标
本章主要让读者了解有关 Red Hat
Linux上如何安装和设置 Web服务器, 如
何使用 Web的程序设计语言 --PHP和数据
库服务器 --MySQL。 通过对本章的学习,
读者应该掌握以下主要内容:
主要内容:
? Apache安装, 启动与配置
?Apache虚拟主机的建立与站点的管理
? MySQL服务器的安装与使用方法
?PHP程序设计语言
?PHP连接 MySQL数据库的方法
7.1 Apache服务器
7.1.1 Apache服务器简介
Apache服务器一个主要的特点是完全
免费, 并且完全公开其源代码, 由此用户可
根据自身的需要去进行相关模块的开发 。
Apache服务器另一个主要的特点是其跨平台
性, 其可在 UNIX,Windows,Linux等多种操作
系统上运行 。 如果需要创建一个每天有数百万人访
问的 Web服务器, Apache可能是最佳选择 。
7.1.2 安装和启动 Apache服务器
1,检测与安装 Apache
在 Red Hat Linux 9中自带了以下两个 Apache2.0的安装
文件:
? httpd,Apache 2.0
? httpd-manual,Apache2.0手册
检测 Linux系统中是否已经安装了 Apache服务器可以使用
下面的命令:
# rpm –qa | grep httpd
7.1.2 安装和启动 Apache服务器
1,检测与安装 Apache
如果确认在 Linux系统中没有安装 Apache,可将 Red Hat
Linux 9的三张安装光盘的第一张放入光驱, 然后执行下
面的命令:
# rpm –ivh httpd-2.0.40-21.i386.rpm
# rpm –ivh httpd-manual-2.0.40-21.i386.rpm
2,Apache服务器的启动和停止
当安装完 Apache服务器后, 如果想让其提供 Web
服务还必须启动它 。 下面的命令用来查看 Apache
服务器是否启动:
# pstree | grep httpd
可以使用如下命令查看 Apache服务器的运行状态:
# service httpd status
可以使用下面的命令来启动或重新启动 Apache服务
器:
# service httpd start
# service httpd restart
7.1.3 Apache服务器的配置
打开 HTTP 配置工具的方法有两种:
( 1) 依次单击, 主菜单 → 系统设置 → 服务器设
置 → HTTP服务器, 。
( 2) 在终端提示中键入 下面的命令 。
# redhat-config-httpd
7.1.3 Apache服务器的配置
使用 HTTP 配置工具来配置 Apache HTTP
服务器的一般步骤如下:
( 1) 在, 主, 标签下配置基本设置 。
( 2) 在, 虚拟主机, 标签下来配置默认设置 。
( 3) 在, 虚拟主机, 标签下, 配置默认的虚拟
主机 。 如果要为多个 URL 或虚拟主机提供服
务, 则添加额外的虚拟主机 。
7.1.3 Apache服务器的配置
( 4) 在, 服务器, 标签下配置服务器设置 。
( 5) 在, 调整性能, 标签下配置连接设置 。
( 6) 把所有必要的文件复制到 DocumentRoot
和 cgi-bin 目录中 。
( 7) 保存设置并退出 HTTP 配置工具 。
1,基本设置
( 1)服务器名称
( 2)网主电子邮件地址
( 3)可用地址
( 4)单击, 添加, 按钮,用来定义接受请求的
其它端口。
2,默认设置
?( 1)站点配置
?( 2)记录日志
?( 3)环境变量
?( 4)目录
3,服务器设置
4,调整性能
7.1.4 配置虚拟主机
虚拟主机是在一台 Web服务器上为多个单独
的域名提供 Web服务,每个域名具有特定的目录
和配置,相当于将一台主机分为多台主机,虚拟
主机技术对于主机数量不足,但又想为不同的用
户提供独立的 Web服务的需求非常有效。
Apache有两种方式支持虚拟主机,
基于 IP的虚拟主机
基于名字的虚拟主机。
1,基于名字的虚拟主机
假设某一学院按照系部或者职能部门组建基于
名字的虚拟主机 。 有一台 Apache服务器和一个
IP地址,211.85.203.22,假设有两个单位需要
建立网站, 一个为办公室网站, 域名为
office.lyd.com, 另一个为计算机系网站, 域
名为 computer.lyd.com
( 1)基于名称的虚拟主机的 DNS配置
现在 想 要创 建 一个 名 为 computer.lyd.com 和
office.lyd.com 的 虚 拟 主 机, 并 使 用 同 一 个
Apache服务器 www.lyd.com。 所需要进行的工作
仅仅是在提交的 DNS配置文件中, 为 lyd.com创
建如下的别名:
office.lyd.com IN CNAME www.lyd.com
computer.lyd.com IN CNAME www.lyd.com
或者
office IN CNAME www
computer IN CNAME www
在上面的配置中, 在提交的 DNS配置文件以及
返回的配置文件中, www.lyd.com已经具有如
下的 A记录和 PTR记录, 分别为:
www IN A 211.85.203.22
1 PTR CNAME www.lyd.com
( 2)修改配置文件
NameVirtualHost 211.85.203.22
<VirtualHost 211.85.203.22 >
ServerName office.lyd.com
DocumentRoot /var/www/html/office
</VirtualHost>
<VirtualHost 211.85.203.22 >
ServerName computer.lyd.com
DocumentRoot /var/www/html/computer
</VirtualHost>
2,基于 IP的虚拟主机
( 1) 基于 IP虚拟主机的 DNS配置
如果用户想要创建二个基于 IP 的虚拟主机,
office.lyd.com,computer.lyd.com。 这二个虚拟
主机站点的共同域名是 lyd.com。 用户可以按照
如下所示在 DNS配置文件中进行配置:
computer IN A 211.85.203.2
office IN A 211.85.203.1
另外, 还需要在 DNS的配置文件中添加以下的
PTR记录:
1 IN PTR office.lyd.com
2 IN PTR computer.lyd.com
( 2)修改配置文件
<VirtualHost 211.85.203.2>
ServerAdmin computer@lyd.com
DocumentRoot /var/www/html/computer
ServerName computer.lyd.com
ErrorLog /var/www/html/computer/logs/error_log
TransferLog /var/www/html/computer/logs/access_log
</VirtualHost>
( 2)修改配置文件
<VirtualHost 211.85.203.1>
ServerAdmin office@lyd.com
DocumentRoot /var/www/html/office
ServerName office.lyd.com
ErrorLog /var/www/html/office/logs/error_log
TransferLog /var/www/html/office/logs/access_log
</VirtualHost>
7.2 数据库服务器 My SQL
1,什么是 MySQL
MySQL是一个多用户、多线程的 SQL数据
库,是一个客户机 /服务器结构的应用,它由一
个服务器守护程序 mysqld和很多不同的客户程
序和库组成。 MySQL 主要的目标是快速、稳定
和容易使用。
2,MySQL的主要特点
?使用核心线程的完全多线程 。
?有多种编程接口 ( API)
?支持不同的平台, MySQL几乎提供了现存的
所有操作系统的对应版本 。
?支持多种字段类型
?一个非常灵活且安全的权限和口令系统, 并
且允许基于主机的认证 。
7.2.2 安装和启动 MySQL
1,安装
当无法确认 Red Hat Linux 9系统中是否安装了
MySQL,可以使用下面的命令来确认:
# rpm – qa | grep mysql
如果确认没有安装 MySQL,在 Red Hat Linux 9的第
2张安装光盘中提供了 MySQL的 RPM安装包, 这些
安装 RPM包有:
mysql-2.23.54a-11.i386.rpm
mysql-server-2.23.54a-11.i386.rpm
mysql-devel-2.23.54a-11.i386.rpm
在使用 MySQL数据库之前, 必须要先启动
MySQL服务, 可以通过以下两个命令来启动
该服务:
( 1) 使用命令,# service mysqld start
( 2) 使用命令,# /etc/init.d/mysqld start
另外, 可以通过下面的命令来检查 MySQL是
否被启动 。
# service mysqld status
或者
# pstree | grep mysqld
( 11)防火墙配置:
若要重新启动 MySQL服务, 可使用如
下命令之一:
# service mysqld restart
# /etc/init.d/mysqld restart
如果需要停止服务, 可使用下面的命
令之一:
# service mysqld stop
# /etc/init.d/mysqld stop
# mysqladmin shutdown
7.2.3 MySQL基本操作
1,连接与断开 MySQL服务器
当使用 mysql命令来连接 MySQL服务器时, 通常需要
提供一个 MySQL用户名和密码 。 如果 MySQL服务器运
行在不是用户所登录的计算机上时, 还将需要指定主机
名 。 连接 MySQL服务器的语句格式如下:
# mysql -h host -u user -p
Enter password,********
7.2.3 MySQL基本操作
1,连接与断开 MySQL服务器
,调用 mysql命令与该服务器连接, 命令格式如下:
# mysql
如果成功地连接后, 用户可以在, mysql>”提示符下输入
QUIT随时断开,( 也可以键入 control-D断开 ) 。
mysql> QUIT
Bye
2,数据库的创建与删除
创建该数据库可使用下面的命令:
mysql> CREATE DATABASE lbuser;
把新创建的数据库作为当前数据库, 命令如下:
mysql> USE lbuser;
Database changed
当用户的数据库建立成功之后, 可以使用下
面的命令来查看数据库是否建成:
mysql> show databases;
当建立的数据库没有用时, 可使用下面的命令来
删除它:
mysql> DROP DATABASE lbuser;
3,数据表的创建与删除
使用下面的命令 CREATE TABLE语句来创建数
据表,
mysql> CREATE TABLE user (ID int primary
key,name VARCHAR(20) not null,
-> password VARCHAR(20),
-> sex VARCHAR(2),email VARCHAR(50),
-> birthday DATE,city VARCHAR(20);
3,数据表的创建与删除
使用 SHOW TABLES命令来查看在数据库是不
是真的建立了 user数据表:
mysql> SHOW TABLES;
DESCRIBE语句命令来显示 user表的字段结构:
mysql> DESCRIBE user;
4,数据记录的增加、删除与修改
在 MySQL中可使用 LOAD DATA和 INSERT语句来
增加数据记录 。
其中,LOAD DATA语句可允许用户一次增加多
条记录。但在使用该语句之前,必须首先创建一个
文本文件, user.txt”,其格式如下,
1 liubing 12345 男 lb@whpu.edu.cn 1968-04-03 武汉
2 lyd 12345 女 lyd@lbliubing.com \N 武汉
可使用下面的命令来装载文本文件, user.txt”到 user
表中:
mysql> LOAD DATA LOCAL INFILE "user.txt" INTO TABLE user;
另一种向数据表中增加记录的方法是用
INSERT语句,下面的命令是使用 INSERT语句
增加一条新记录:
mysql> INSERT INTO user
-> VALUES (3,?jiangli?,?12345?,?女 ’,‘ lb@whpu.edu.cn?,?1972-
10-18?,?武汉 ’ );
用户可以使用下面的命令来显示 user表
中的所有数据记录信息。
mysql> SELECT * FROM user;
下面这条指令删除数据表中的所有记录:
mysql> DELETE FROM user;
删除在数据表 user中新增加的, ID=2”的数据
记录, 语句如下:
mysql> DELETE FROM user WHERE ID=2;
要修改 user数据表中的用户名为 liubing的用
户密码, 可使用下面的语句:
mysql> UPDATE user SET password = "567890" WHERE ID=1;
5,数据表记录的查询
mysql> SELECT * FROM user WHERE sex=,男, ;
mysql> SELECT * FROM user WHERE sex= "男 " and ID<100;
mysql> SELECT name,birthday,sex FROM user WHERE sex= "男 "
ORDER BY birthday DESC;
mysql> SELECT * FROM user WHERE name LIKE "j%";
mysql> SELECT sex,COUNT(*) FROM user GROUP BY sex;
7.2.4 MySQL数据库的用户权限
1,用户权限概述
MySQL权限系统的主要功能是控制某个用户
是否能够连接到指定的 MySQL数据库,以及控制该
用户是否具有在一个数据库中进行查询( select)、
增加( insert),更新( update) 和删除( delete)
的权限。
2,建立初始的 MySQL权限
为 root用户增加口令:
# mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('new_password')
WHERE user='root';
mysql> FLUSH PRIVILEGES;
删除匿名用户可使用下面的命令:
# mysql –u root –pcrq mysql
mysql> DELETE from user WHERE user=' ';
7.2.5 MySQL数据库的备份与恢复
1,使用 mysqldump备份和拷贝数据库
mysqldump语句的命令格式如下:
# mysqldump [OPTIONS] database [tables]
例如, 把数据库 lbuser备份到 /home/lb目录 。
可使用如下命令:
# cd /var/lib/mysql
# mysqldump –u root –pcrq –opt lbuser > /home/lb/lbuser040403.sql
2,使用直接拷贝数据库的备份和拷贝方法
下列命令给出如何将整个 lbuser数据库备
份到 /home/lb:
# cd /var/lib/mysql
# cp -r lbuser /home/lb/ lbuser040403
7.3 Web程序设计语言( PHP)
7.3.1 PHP简介
PHP 是一种服务器内置式的 Script 语言,它的出现使得
在 UNIX上快速地开发动态 Web网页成为现实,PHP代表的是
超文本预处理器。
PHP3大量采用了 C,Java和 Perl语言的语法,并加入了各
种 PHP的特征。它与 JavaScript等语言的一个区别就是 PHP3是
在服务器端执行,客户机所看到的是其在服务器上运行的结
果,
PHP支持面向对象的编程,即 PHP提供了类和对象,同时
PHP还支持构造器、提取类等。基于 Web的编程工作非常需要
面向对象编程能力。
7.3.2 PHP的基础 ―― HTML语言
1,HTML 语言的结构
HTML( 超文本标记语言)是一种描述文档结构的标注
语言,它使用一些约定的标记对 WWW上的各种信息进行标
注。
HTML文件是标准的 ASCII文件,且其后缀名为 htm或
html的文件。 HTML文件看起来像是加入了许多被称为链接
签( tag) 的特殊字符串的普通文本文件。
<HTML>
<HEAD>
<TITLE>武汉工业学院 </TITLE>
</HEAD>
<BODY bgcolor= yellow>
<P>这是一 HTML的测试文件 </P>
</BODY>
</HTML>
链接签的格式为:
<起始链接签 属性名=属性值 > 内容 <结束链接签 >
元素名也叫链接签名 。 需要注意的是:
( 1), <” 和起始链接签之间不能有空格 。
( 2) 元素名称不区分大小写 。
( 3) 一个元素可以有多个属性, 属性及其属性
值不区分大小写, 且各个属性用空格分开 。
2,超文本链接指针
( 1)统一资源定位器 URL
在互连网上同样找一个文件,除了要知道
以上内容之外,显然还需要知道该文件存放在
哪个网络的哪台主机中才行。
一个 URL包括了以上所有的信息 。 它的构成
如下:
protocol,// machine.name[:port]/ directory/ filename
( 2) 建立一个链接
在 HTML文件中用链接指针指向一个目标 。 其基本
格式为:
<a href = "… "> zzz </a>
例如:
<a href = "http://www.whpu.edu.cn/">武汉工业学院 </a>
3,表单的应用
( 1) 什么是表单
HTML提供的表单是用来将用户所输入的数据
从客户端浏览器传递给 Web服务器的。
PHP程序是在服务器端工作,并且通过服务器
端的编译,动态地送出 HTML文件给客户端,PHP
程序负责处理 HTML文件与运行在服务器端的程序
之间的数据交换。
( 2)表单的标记
< FORM ACTION =,…, METHOD=”…, >

</FORM>
( 3) HTML中的 INPUT标记
<INPUT TYPE=“…, VALUE =“…,>
TYPE =,TEXT” 表示在表单中使用单行文本框
=, PASSWORD” 表示在表单中为用户提供密码输入框
=, RADIO” 表示在表单中使用单选按钮
=, CHECKBOX” 表示在表单中使用多选按钮
=, SUBMIT” 表示在表单中使用提交按钮
=, RESET” 表示在表单中使用重置按钮
<HTML>
2 <HEAD>
3 <TITLE>这是个测试页 </TITLE>
4 </HEAD>
5 <BODY>
6 <form action=“reg.php” method=POST>
7 请输入您的真实姓名, <input type=text name=姓名 ><br>
8 您的主页的网址, <input type=text name=网址
value=http://><br>
9 密码, <input type=password name=密码 ><br>
10 <input type=submit value="发送 "><input type=reset value="重设 ">
11 </form>
12 </BODY>
13 </HTML>
7.3.3 PHP语法简介
1,PHP的一个简单程序
<html>
<head>
<title>第一个 PHP程序 </title>
</head>
<body>
<?php
echo "hello,world\n";
>
</body>
</html>
2,程序注释
,//”符号是对单行进行注释;
,/* …… */”可对多行语句进行注释。
<?php
echo "这是第一种例子 。 \n"; // 本例是 C++ 语法的单行注释
/* 本例采用多行的
注释方式 */
echo "这是第两种例子 。 \n";
echo "这是第三种例子 。 \n"; # 本例使用 UNIX Shell 语法注释
>
3,PHP程序中的变量
( 1) 变量类型
PHP 的变量类型不多, 有以下五种,string, integer,
double, array 和 object 。
以下为变量的使用范例:
$universty = "武汉工业学院 "; //字符串变量
$int1 = 38; //数字型变量
$MyArray1 = array("lb","jl","lyd","lx");
//数组变量
( 2) 变量的使用
PHP程序中的变量使用范围分为全局变量与局部变量 。
可以透过 $GLOBALS[“变量名称, ] 将需要的全局变量
取出 。
4,PHP中的表单变量
next.php 在执行时, 系统会自动产生两个
变量 $username 及 $sex,可直接使用 。
<form action=next.php method=post>
姓名, <input type=text name="username"><br>
性别, <input type=text name="sex"><br>
<input type=submit>
</form>
5,PHP运算符
( 1) 算术运算
加法运算 ( + ), 减法运算 ( - ), 乘法运算
( * ), 除法运算 ( /), 取余数 ( %), 累加 ( ++ ) 和递
减 ( ―― ) 。
( 2) 字符串运算
<?php
$a = "PHP 4";
$b = "功能强大 ";
echo $a.",".$b;
>
( 3)位运算
PHP 的位运算 (bitwise operators) 共有六个:与
( &), 或 ( |), 异或 ( ^), 向左移位 ( <<),
向右移位 ( >>), 取 1 的补 ( ~) 。
( 4)逻辑运算
逻辑运算 (logical operators) 通常用来测试真假值。小
于( <)、大于( >)、小于等于( <=)、大于等于
( >=)、等于 ( ==)、不等于( !=)、与( and),或
( ||)、异或 ( xor),非( !)。
6,流程控制
( 1) if条件语句
If (expr)
{
code_block1
}
else
{
code_block2
}
( 2) switch语句
switch (表达式 ) {
case 值 1,code_block1
break;
case 值 2,code_block2
break;
case 值 3,code_block3
break;

default,code_blockn
}
( 2)循环语句
① for语句
for语句用来产生一段程序循环, 其语法格式如下:
for ( init; test; incre)
{
code_block
}
② while 语句
while (expr) {
code_block;
}
③ do… while 语句
do{
code_block
} while (expr) ;
<HTML>
<HEAD>
<TITLE>text</TITLE>
</HEAD>
<BODY>
<?php
for($i=1;$i<7;$i++){
echo "<font size=".$i.">hello<br>";
}
>
</BODY>
</HTML>
7.3.4 PHP连接 MySQL的方法
( 1) 与 MySQL服务器建立连接 。
( 2) 选择准备操作和使用的指定数据库 。
( 3) 发出 SQL命令 。 用一个函数向 MySQL服务器发出 SQL的查
询指令语句字符串 。 发出的字符串可以是 SQL的任何 DML查
询指令, 包括 INSERT,DELETE等, 但是要取得数据应使用
SQL查询语句 ―― SELECT。 查询函数会返回一个查询结果指
针 。
( 4) 取得结果 。 上一个步骤返回的是查询的结果指针, 用
这个指针值就可以从查询结果中, 返回特定的数据 。 通常会
返回一笔记录, 返回的类型为数组或对象 。
( 5)关闭链接,关闭与数据库的链接。
1,与 MySQL的连接与关闭
int mysql_connect(hostname,port,username,password)
<?php
$username='root';
$passwd=''; //MySQL初始安装时, root用户的密码为空
//连接数据库
$link_mess=mysql_connect('localhost',$username,$passwd);
//显示数据库连接的返回信息
if (!$link_mess){
echo "对不起, 与 MySQL服务器连接失败 ! ";
exit();
}
else
{
echo "已经成功地与 MySQL服务器连接 ";
}
>
当要关闭 MySQL连接时, 可以使用 mysql_close()函数 。 当
关闭成功会返回, True”,否则返回, Flase”。 语法如下:
mysql_close(变量 )
2,数据库的选择
mysql_select_db()主要是选取所要使用的数
据库, 如果能成功选取数据库则返回, True”,
若找不到数据库或选取失败则返回, False”。 语
法如下:
mysql_select_db(数据库名称 )
<HTML>
<HEAD>
<TITLE> 数据库的选择 </TITLE>
</HEAD>
<BODY>
<?php
$myconn=mysql_connect("localhost","root","");
if (mysql_select_db("lbuser")){
echo "lbuser数据库已被选取 ";
}
else
{
echo "lbuser数据库选取不成功 ";
}
>
</BODY>
</HTML>
3,发送 SQL命令
在读取数据库中的数据表之前, 先要用
Mysql_query() 函数来将 SQL 命令传给
MySQL来处理 。 该函数的语法如下:
mysql_query(SQL命令或变量,链接指针 )
读取数据表可使用 Mysql_fetch_field()函
数, 该函数的语法如下:
Mysql_fetch_field(数据查询结果 )
<HTML>
<HEAD>
<TITLE> 数据库的选择 </TITLE>
</HEAD>
<BODY>
<?php
Mysql_connect("localhost","root",""
);
Mysql_select_db("lbuser");
$SQL_String="Select * from user";
$Exec=Mysql_query($SQL_String);
If($field=Mysql_fetch_field($Exec))
{
echo "标题名称,$field->name <br>";
echo "所属数据表,$field->table <br>";
echo "数据类型,$field->type <br>";
echo " 字 段 最 大 长 度, $ field-
>max_length <br>";
}
else
{
echo "没有相关信息 ";
}
>
</BODY>
4,取得数据
下面的示例是在数据表中读取三条记录,并把读取结果
的两个字段在浏览器中显示。
<HTML>
<HEAD>
<TITLE> 从数据库中取打开的当前记录 </TITLE>
</HEAD>
<BODY>
<?php
$dbname='lbuser';
$dbtable='user';
$myconn=mysql_connect("localhost","root","");
mysql_select_db("lbuser");
$SQL_String="Select * from user order by id ";
$Exec=mysql_query($SQL_String,$myconn);
mysql_close($myconn);
for ($i=1;$i<4;$i++){
$record=mysql_fetch_row($Exec);
echo "user,";
echo $record[1];
echo "<br>";
echo "";
echo $record[2];
echo "<br>";
echo "<br>";
}
>
</BODY>
</HTML>
本章小结
本章主要讲解在 Linux操作系统中如何架设与 Web应用相关
的服务器及程序设计语言, 主要包括,Apache服务器, 数
据库服务器 MySQL,Web程序设计语言 ( PHP) 。 在
Apache服务器一节中着重介绍了 Apache服务器的安装与启
动方法, Apache服务器的配置方法;在数据库服务器一节
中, 着重介绍了 MySQL的启动与安装方法, 如何建立数据
库, 如何新建一个数据表, 如何对数据表中的记录进行添
加, 删除, 修改, 如何设置数据库的存取权限, 如何对数
据库进行备份;在 Web程序设计语言一节中, 对 PHP的语
法, 与M ySQL数据库的连接方法都做了十分详细的说明 。
通过对本章的学习, 读者应该熟练掌握以下 Apache服务器
地安装, 启动与配置方法, MySQL服务器的安装与使用方
法, PH P程序设计语言,