关键技术需说明选用原因、具体用法及实际卡点,如用password_hash()替代md5()因安全性更高,文件上传须用finfo_file()校验mime类型并重命名防覆盖,数据库事务需手动处理异常与并发冲突。

PHP毕业设计里写“关键技术”不是列技术名词,是讲清楚你为什么用它、怎么用、卡在哪
学生常把“关键技术”写成 MySQL、Bootstrap、jQuery 这种词堆砌,答辩老师一眼看穿——这根本不是你用的技术,是你抄的课设大纲。真正要写的,是那个你调试了三小时才搞明白的点:比如为什么非要用 password_hash() 而不是 md5(),或者为什么登录态不用 $_SESSION 而改用 JWT token + Redis 存储。
写“文件上传与安全校验”比写“使用PHP实现上传功能”有用十倍
这是毕业设计里最常出问题又最被轻描淡写的一块。很多人只写“用了 move_uploaded_file()”,但实际卡点全在后面:
-
$_FILES['file']['type']是浏览器传来的,不可信,必须用finfo_file()重新检测 MIME 类型 - 后缀白名单(如
['jpg', 'png', 'pdf'])必须和真实内容校验配合,否则改个.php.jpg就能绕过 - 上传路径不能直接拼接用户传的
$_FILES['file']['name'],得用uniqid() . '.' . $ext重命名,否则可能覆盖.htaccess或触发路径遍历 - 如果支持多图,
$_FILES数组结构会变成二维,不处理好直接foreach会报Undefined index
数据库操作别只提PDO,重点写你如何应对事务失败和并发冲突
写“采用PDO预处理防止SQL注入”是废话,所有教材都这么写。老师想看的是你真实踩过的坑:
- 转账功能里,两个账户余额更新必须包在
$pdo->beginTransaction()/$pdo->commit()里,否则中途出错会导致数据不一致 - 库存扣减场景下,光用
UPDATE goods SET stock = stock - 1 WHERE id = ? AND stock > 0不够,得检查$pdo->rowCount()返回是否为 1,为 0 就说明库存不足,不能靠 PHP 层先SELECT再UPDATE(会有竞态) - 如果用
innodb,注意默认隔离级别是REPEATABLE READ,做“查后即更”类逻辑时,可能读到旧快照,必要时加SELECT ... FOR UPDATE
前端交互涉及PHP时,别漏掉跨域、CSRF、接口幂等性这些隐性成本
很多同学做前后端分离式毕设(比如 Vue + PHP API),却在“关键技术”里只字不提后端如何兜底:
立即学习“PHP免费学习笔记(深入)”;
- API 接口被别人用脚本批量调用怎么办?至少加个
$_SERVER['HTTP_REFERER']粗筛,或对敏感操作(如提交订单)要求带X-CSRF-TOKEN头,token 存在$_SESSION或Redis中 - 文件预览接口返回图片,但浏览器因跨域拒绝渲染?得手动加
header('Access-Control-Allow-Origin: *'),但生产环境不能开*,得限定域名 - 支付回调通知可能重复推送,你的
notify.php必须先查数据库判断该订单是否已处理,而不是无脑更新状态,否则会重复发货或扣款
真正难写的不是代码,是那些没出现在主流程里、但一出问题就整站瘫痪的边界逻辑。写关键技术,就是把这类“当时调试到凌晨两点终于加上的那行 if (!isset($_SESSION['user_id'])) die('403');”背后的原因说透。











