实验环境要求
- 操作系统:Windows 7/8/10/11
- 服务器套装:WAMP 2.5 (包含 Apache 2.4 + PHP 5.5 + MySQL)
- 开发工具:任意文本编辑器(推荐 VS Code)
- 浏览器:Chrome/Firefox(带开发者工具)
实验一:WAMP服务器安装与基础配置
实验目标
掌握WAMP服务器的安装、启动和基础配置
实验内容
-
WAMP安装
- 下载WAMP 2.5安装包
- 完成安装过程,选择安装目录为
C:\wamp - 验证安装:启动WAMP,系统托盘图标变为绿色
-
目录结构熟悉
- 网站根目录:
C:\wamp\www\ - Apache配置目录:
C:\wamp\bin\apache\apache2.4.9\conf\ - PHP配置目录:
C:\wamp\bin\php\php5.5.12\
- 网站根目录:
-
基础测试
- 创建测试文件
C:\wamp\www\test.php
php<?php echo "Hello, WAMP Server!"; phpinfo(); ?>- 访问
http://localhost/test.php验证PHP运行
- 创建测试文件
验证标准
-
WAMP服务正常启动(绿色图标)

-
能够通过浏览器访问测试页面
-

-
PHP信息页面正常显示

实验二:HTTP协议报文分析
实验目标
理解HTTP请求和响应报文结构
实验内容
-
使用Telnet手动发送HTTP请求
bashtelnet localhost 80 GET /test.php HTTP/1.1 Host: localhost观察服务器响应
-
创建HTTP报文分析工具
- 创建
http_analyzer.php
php<?php // 显示所有HTTP请求头 echo "<h2>HTTP Request Headers:</h2>"; foreach(getallheaders() as $name => $value) { echo "$name: $value<br>"; } // 显示服务器信息 echo "<h2>Server Information:</h2>"; echo "Request Method: " . $_SERVER['REQUEST_METHOD'] . "<br>"; echo "Query String: " . $_SERVER['QUERY_STRING'] . "<br>"; echo "User Agent: " . $_SERVER['HTTP_USER_AGENT'] . "<br>"; // 显示POST数据(如果有) if($_POST) { echo "<h2>POST Data:</h2>"; print_r($_POST); } ?> - 创建
-
HTTP方法测试
- 创建
http_methods.html
html<!DOCTYPE html> <html> <head> <title>HTTP Methods Test</title> </head> <body> <h2>GET Method Test</h2> <form action="http_analyzer.php" method="get"> Name: <input type="text" name="name"><br> Email: <input type="text" name="email"><br> <input type="submit" value="GET Submit"> </form> <h2>POST Method Test</h2> <form action="http_analyzer.php" method="post"> Name: <input type="text" name="name"><br> Email: <input type="text" name="email"><br> <input type="submit" value="POST Submit"> </form> </body> </html> - 创建
验证标准
- 能够通过Telnet手动发送HTTP请求


-
HTTP分析工具能正确显示请求头信息
-

-
GET和POST方法测试正常
在server information可以看到填写的name 和 Email


实验三:Cookie的实现与使用
实验目标
掌握Cookie的设置、读取、删除操作
实验内容
-
基础Cookie操作
- 创建
cookie_demo.php
php<?php // 设置Cookie $cookie_name = "user"; $cookie_value = "John Doe"; setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 30天 // 检查Cookie是否设置 if(!isset($_COOKIE[$cookie_name])) { echo "Cookie '" . $cookie_name . "' 尚未设置!"; } else { echo "Cookie '" . $cookie_name . "' 已设置!<br>"; echo "值为: " . $_COOKIE[$cookie_name]; } ?> - 创建
-
Cookie计数器
- 创建
cookie_counter.php
php<?php $visit_count = 1; // 检查是否已有访问计数 if(isset($_COOKIE['visit_count'])) { $visit_count = $_COOKIE['visit_count'] + 1; } // 设置Cookie,有效期1小时 setcookie('visit_count', $visit_count, time() + 3600); echo "<h2>欢迎访问!</h2>"; echo "这是您第 " . $visit_count . " 次访问本页面"; // 提供重置功能 echo '<br><a href="?reset=1">重置计数器</a>'; if(isset($_GET['reset'])) { setcookie('visit_count', '', time() - 3600); // 删除Cookie header("Location: cookie_counter.php"); // 重定向 } ?> - 创建
-
登录状态模拟
- 创建
cookie_login.php
php<?php // 模拟登录处理 if(isset($_POST['login'])) { $username = $_POST['username']; $password = $_POST['password']; // 简单验证(实际应用中需要数据库验证) if($username === 'admin' && $password === '123456') { // 设置登录Cookie,有效期30分钟 setcookie('user_login', $username, time() + 1800); setcookie('login_time', date('Y-m-d H:i:s'), time() + 1800); echo "登录成功!"; } else { echo "用户名或密码错误!"; } } // 检查登录状态 if(isset($_COOKIE['user_login'])) { echo "<h2>欢迎回来, " . $_COOKIE['user_login'] . "!</h2>"; echo "登录时间: " . $_COOKIE['login_time']; echo '<br><a href="?logout=1">退出登录</a>'; } else { // 显示登录表单 echo ' <h2>用户登录</h2> <form method="post"> 用户名: <input type="text" name="username"><br> 密码: <input type="password" name="password"><br> <input type="submit" name="login" value="登录"> </form> <p>提示: 用户名: admin, 密码: 123456</p> '; } // 退出处理 if(isset($_GET['logout'])) { setcookie('user_login', '', time() - 3600); setcookie('login_time', '', time() - 3600); header("Location: cookie_login.php"); } ?> - 创建
验证标准
- Cookie设置、读取、删除功能正常

- 访问计数器正确工作


- 登录状态能够正确维持和清除


实验四:Session的实现与使用
实验目标
掌握Session的启动、数据存储和销毁
实验内容
-
基础Session操作
- 创建
session_basic.php
php<?php session_start(); // 设置Session变量 $_SESSION['username'] = 'Alice'; $_SESSION['email'] = 'alice@example.com'; $_SESSION['login_time'] = date('Y-m-d H:i:s'); echo "<h2>Session信息已设置</h2>"; echo "Session ID: " . session_id() . "<br>"; echo "Session Name: " . session_name() . "<br>"; // 显示所有Session变量 echo "<h3>当前Session数据:</h3>"; foreach($_SESSION as $key => $value) { echo $key . " = " . $value . "<br>"; } echo '<br><a href="session_show.php">查看Session数据</a>'; ?> - 创建
-
Session数据展示
- 创建
session_show.php
php<?php session_start(); ?> <!DOCTYPE html> <html> <head> <title>Session数据展示</title> </head> <body> <h2>当前Session数据</h2> <?php if(empty($_SESSION)) { echo "没有Session数据"; } else { echo "<table border='1'>"; echo "<tr><th>键</th><th>值</th></tr>"; foreach($_SESSION as $key => $value) { echo "<tr><td>$key</td><td>$value</td></tr>"; } echo "</table>"; } ?> <br> <a href="session_basic.php">设置Session</a> | <a href="session_destroy.php">销毁Session</a> </body> </html> - 创建
-
Session购物车模拟
- 创建
session_cart.php
php<?php session_start(); // 初始化购物车 if(!isset($_SESSION['cart'])) { $_SESSION['cart'] = array(); } // 添加商品到购物车 if(isset($_POST['add_item'])) { $item = $_POST['item']; $quantity = $_POST['quantity']; if(isset($_SESSION['cart'][$item])) { $_SESSION['cart'][$item] += $quantity; } else { $_SESSION['cart'][$item] = $quantity; } } // 清空购物车 if(isset($_GET['clear'])) { $_SESSION['cart'] = array(); } ?> <!DOCTYPE html> <html> <head> <title>购物车演示</title> </head> <body> <h2>购物车系统</h2> <h3>添加商品</h3> <form method="post"> 商品: <input type="text" name="item" required> 数量: <input type="number" name="quantity" value="1" min="1"> <input type="submit" name="add_item" value="添加到购物车"> </form> <h3>购物车内容</h3> <?php if(empty($_SESSION['cart'])): ?> <p>购物车为空</p> <?php else: ?> <ul> <?php foreach($_SESSION['cart'] as $item => $quantity): ?> <li><?php echo $item . ' - 数量: ' . $quantity; ?></li> <?php endforeach; ?> </ul> <a href="?clear=1">清空购物车</a> <?php endif; ?> <p><a href="session_show.php">查看Session详情</a></p> </body> </html> - 创建
-
Session销毁
- 创建
session_destroy.php
php<?php session_start(); // 显示销毁前的Session数据 echo "<h2>销毁前的Session数据:</h2>"; print_r($_SESSION); // 销毁Session session_destroy(); echo "<h2>Session已销毁</h2>"; echo '<a href="session_show.php">验证Session是否已销毁</a>'; ?> - 创建
验证标准
- Session能够正确设置和读取数据
- 购物车功能正常工作
- Session销毁功能正常
实验五:虚拟主机配置
实验目标
掌握Apache虚拟主机的配置方法
实验内容
-
配置虚拟主机文件
- 编辑
C:\wamp\bin\apache\apache2.4.9\conf\extra\httpd-vhosts.conf
apache# 默认虚拟主机 <VirtualHost *:80> DocumentRoot "C:/wamp/www" ServerName localhost <Directory "C:/wamp/www"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost> # 测试站点1 <VirtualHost *:80> DocumentRoot "C:/wamp/www/site1" ServerName site1.test <Directory "C:/wamp/www/site1"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog "C:/wamp/logs/site1_error.log" CustomLog "C:/wamp/logs/site1_access.log" common </VirtualHost> # 测试站点2 <VirtualHost *:80> DocumentRoot "C:/wamp/www/site2" ServerName site2.test <Directory "C:/wamp/www/site2"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog "C:/wamp/logs/site2_error.log" CustomLog "C:/wamp/logs/site2_access.log" common </VirtualHost> - 编辑
-
启用虚拟主机配置
-
编辑
C:\wamp\bin\apache\apache2.4.9\conf\httpd.conf -
确保以下行没有被注释:
Include conf/extra/httpd-vhosts.conf
-
-
配置hosts文件
-
编辑
C:\Windows\System32\drivers\etc\hosts -
添加以下行:
127.0.0.1 site1.test
127.0.0.1 site2.test
-
-
创建测试站点
- 创建目录
C:\wamp\www\site1和C:\wamp\www\site2 - 创建
site1/index.php:
php<?php header('Content-Type: text/html; charset=utf-8'); echo "<h1>欢迎访问站点 1 (site1.test)</h1>"; echo "服务器名: " . $_SERVER['SERVER_NAME'] . "<br>"; echo "文档根目录: " . $_SERVER['DOCUMENT_ROOT']; ?>- 创建
site2/index.php:
php<?php header('Content-Type: text/html; charset=utf-8'); echo "<h1>欢迎访问站点 2 (site2.test)</h1>"; echo "服务器名: " . $_SERVER['SERVER_NAME'] . "<br>"; echo "文档根目录: " . $_SERVER['DOCUMENT_ROOT']; ?> - 创建目录
-
虚拟主机特定配置
- 在
site1中创建.htaccess文件测试URL重写:
apacheRewriteEngine On RewriteRule ^hello$ welcome.php [L]- 创建
site1/welcome.php:
php<?php header('Content-Type: text/html; charset=utf-8'); echo "<h1>欢迎页面!</h1>"; echo "通过URL重写访问的页面。"; ?> - 在
验证标准
- 能够通过
http://site1.test和http://site2.test访问不同站点 - 每个站点显示正确的服务器信息和文档根目录
- URL重写功能正常工作