一、回顾上节课内容
- 多维数组的操作与常用数组函数
- 字符串处理与格式化技巧
- 超全局变量(
$_GET
/$_POST
/$_SERVER
等)的使用
二、文件操作
1. 文件读写基础
(1) 打开/关闭文件
<?php
// 打开文件(r: 只读,w: 写入覆盖,a: 追加写入)
$file = fopen("test.txt", "w") or die("无法打开文件!");
// 关闭文件
fclose($file);
?>
(2) 写入文件
<?php
$content = "这是第一行文本\n这是第二行文本";
file_put_contents("data.txt", $content); // 快速写入(自动创建文件)
// 或分步写入
$file = fopen("log.txt", "a");
fwrite($file, date("Y-m-d H:i:s")." 日志内容\n");
fclose($file);
?>
(3) 读取文件
<?php
// 读取整个文件
echo file_get_contents("data.txt");
// 逐行读取
$file = fopen("data.txt", "r");
while(!feof($file)) {
echo fgets($file)."<br>"; // 读取一行
}
fclose($file);
// 将文件读取为数组
$lines = file("data.txt");
foreach($lines as $line) {
echo $line."<br>";
}
?>
2. 常用文件函数
<?php
// 检查文件是否存在
if(file_exists("data.txt")) {
echo "文件存在";
}
// 获取文件大小(字节数)
echo filesize("data.txt")." bytes";
// 复制文件
copy("data.txt", "backup.txt");
// 重命名文件
rename("old.txt", "new.txt");
// 删除文件
unlink("trash.txt");
?>
3. 文件上传处理
<!-- HTML表单 -->
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="myFile">
<input type="submit" value="上传">
</form>
<?php
// upload.php
if($_FILES["myFile"]["error"] == UPLOAD_ERR_OK) {
$tempFile = $_FILES["myFile"]["tmp_name"];
$targetPath = "uploads/".$_FILES["myFile"]["name"];
// 移动临时文件到目标目录
move_uploaded_file($tempFile, $targetPath);
echo "文件上传成功!";
} else {
echo "文件上传失败:".$_FILES["myFile"]["error"];
}
?>
三、表单处理与验证
1. 基础表单处理
<form action="process.php" method="post">
姓名:<input type="text" name="username"><br>
邮箱:<input type="email" name="email"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="提交">
</form>
<?php
// process.php
if($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST["username"];
$email = $_POST["email"];
$password = $_POST["password"];
// 简单的安全过滤
$username = htmlspecialchars(trim($username));
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
echo "注册信息:<br>";
echo "用户名:$username<br>";
echo "邮箱:$email";
}
?>
2. 数据验证
<?php
$errors = [];
// 验证规则
if(empty($_POST["username"])) {
$errors[] = "用户名不能为空";
} elseif(strlen($_POST["username"]) < 3) {
$errors[] = "用户名至少3个字符";
}
if(!filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)) {
$errors[] = "邮箱格式不正确";
}
if(strlen($_POST["password"]) < 6) {
$errors[] = "密码至少6位";
}
// 处理验证结果
if(!empty($errors)) {
foreach($errors as $error) {
echo "<p style='color:red'>$error</p>";
}
} else {
// 执行数据库操作等
}
?>
3. 防止XSS攻击
<?php
// 输出用户输入时进行转义
echo htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');
// 或者使用模板引擎自动转义
?>
四、错误处理
1. 错误类型
- 注意错误(Notice):
E_NOTICE
- 警告错误(Warning):
E_WARNING
- 致命错误(Fatal Error):
E_ERROR
2. 错误控制
<?php
// 关闭错误显示(生产环境推荐)
ini_set('display_errors', 0);
// 设置错误报告级别
error_reporting(E_ALL); // 报告所有错误
error_reporting(E_ERROR | E_WARNING); // 只报告ERROR和WARNING
// 自定义错误处理函数
set_error_handler(function($errno, $errstr, $errfile, $errline) {
echo "<b>错误:</b> [$errno] $errstr<br>";
echo "发生在文件 $errfile 的第 $errline 行";
return true; // 阻止默认错误处理
});
?>
3. 异常处理(try-catch)
<?php
try {
// 可能出错的代码
$file = fopen("nonexist.txt", "r");
if(!$file) {
throw new Exception("无法打开文件");
}
} catch(Exception $e) {
echo "捕获异常:".$e->getMessage();
// 记录日志:error_log($e->getMessage());
}
?>
五、作业练习
-
创建一个留言板功能,包含:
- 表单页面(姓名、留言内容)
- 处理页面(将留言保存到txt文件)
- 显示页面(读取并显示所有留言)
-
编写一个文件操作函数,实现:
- 参数:文件名、操作模式(read/write/append)
- 返回值/功能:根据模式执行对应操作
-
创建一个注册表单,包含:
- 用户名(3-10位字母数字)
- 密码(6位以上,包含字母和数字)
- 邮箱(有效格式)
- 实现实时前端验证和后端验证
-
为文件上传功能添加限制:
- 仅允许jpg/png格式
- 文件大小不超过2MB
- 防止文件名重复
下节课预告
- MySQL数据库基础
- PHP操作MySQL
- Cookie与Session管理
- 实现登录注册功能
建议在本地环境中动手实践所有示例代码!
这一切,似未曾拥有