PHP 项目上线检查清单:从开发到生产的终极指南
目录导读
- 为什么需要上线检查清单?
- 环境配置与服务器检查
- 代码与依赖项审查
- 安全加固:不可忽视的防线
- 性能优化与缓存策略
- 数据库迁移与备份验证
- 日志、监控与错误处理
- 常见问题问答(FAQ)
- 上线后的24小时黄金法则
为什么需要上线检查清单?
PHP 项目上线是“从0到1”的关键一跃,一次失败的部署可能导致数据丢失、安全漏洞甚至业务中断,根据统计,70%的上线事故源于人为疏忽——忘记修改配置、未关闭调试模式、未清理测试数据等,检查清单不是束缚,而是防止低级错误的最后一道防线,它能将“我以为我检查了”变成“我确认我检查了”。

环境配置与服务器检查
- PHP 版本匹配:生产环境必须与开发环境使用完全一致的主版本(8.2.x),否则潜在函数行为差异会导致“本地正常、线上报错”。
- 扩展启用:执行
php -m确认PDO、OpCache、Redis(如有)等扩展已安装,缺失扩展是上线后最常见的“空错误”。 - 错误显示关闭:在
php.ini中设置display_errors = Off,并开启log_errors = On,此时若页面白屏,请检查error_log文件。 - 时区设置:
date.timezone务必统一,否则时间戳函数(如strtotime)可能产生偏移。
代码与依赖项审查
- 移除开发调试代码:使用
grep -r "var_dump\|print_r\|dd("递归搜索项目目录,这些函数一旦暴露在线上将泄露数据库结构。 - Composer 依赖锁定:上线必须使用
composer.lock安装,执行composer install --no-dev(跳过开发依赖)。 - 环境变量隔离:
.env文件严禁提交到 Git 仓库!生产环境的APP_ENV=production,APP_DEBUG=false,若使用框架(Laravel/ThinkPHP),需执行php artisan config:cache让配置生效。
安全加固:不可忽视的防线
- 目录权限最小化:网站根目录外的文件(如
.env、storage/)建议设750权限,仅有写入需求的目录(如上传目录、日志)设755但禁止执行PHP脚本。 - 禁用危险函数:在
disable_functions中添加exec, system, shell_exec, passthru等(除非业务必需)。 - CSRF 与 XSS 防护:确认所有
POST表单已携带 Token,输出端使用htmlspecialchars()进行转义。 - HTTPS 强制跳转:在
public/.htaccess或 Nginx 配置中添加 301 重定向,避免明文传输 session 信息。
性能优化与缓存策略
- OpCache 预热:开启
opcache.enable=1,并设置opcache.memory_consumption=128,上线后允许用户第一次请求缓存命中。 - 页面静态化:若存在不频繁更新的页面,可输出为
HTML文件,降低 PHP 进程负担。 - 数据库查询索引:使用
EXPLAIN检查慢查询日志中排名前 5 的 SQL,确认是否走索引。 - CDN 与合并压缩:若前端资源多,启用 Gzip 压缩,并将 CSS/JS 合并文件减少 HTTP 请求数。
数据库迁移与备份验证
- 迁移脚本先行:执行
php artisan migrate(或相应脚本)前,做好完整 SQL 备份,建议使用mysqldump -u user -p db > backup.sql备份。 - 种子数据清理:确认测试用户、假订单等数据未进入生产库,可使用
php artisan tinker或直接 SQL 查询验证。 - 外键与字符集:确认表引擎为
InnoDB,字符集为utf8mb4_unicode_ci(避免中文乱码)。
日志、监控与错误处理
- 错误日志路径:确保
error_log指向可写目录,并启用log_errors_max_len = 0(不截断)。 - 关键操作日志:例如支付回调、登录失败记录,需写入独立日志文件,便于事后审计。
- 监控探针:建议部署 UptimeRobot 或阿里云监控,每 5 分钟请求首页和健康检查接口,当响应码非 200 时立即告警。
常见问题问答(FAQ)
Q1:上线后发现页面显示“500 Internal Server Error”,但没有任何日志,怎么办?
A:先检查 storage/logs/ 目录权限;然后在 public/index.php 中临时加入 ini_set('display_errors', 1); 刷新页面,看到错误后立即改回,若是框架路由问题,可执行 php artisan route:list 验证。
Q2:为什么本地正常,线上却总是登录超时?
A:检查 session.cookie_secure 是否为 1(需 HTTPS),以及 session.cookie_domain 是否设置正确(如 .your-domain.com 包含子域名),Redis 会话存储时,确认 REDIS_HOST 已指向生产实例。
Q3:上传图片后访问返回 404?
A:大概率是 Nginx 未配置 try_files 指向 public/ 目录,检查 Nginx 配置中 root 是否为项目绝对路径,并执行 nginx -t 校验语法后 reload。
上线后的24小时黄金法则
上线并非结束,而是新的开始,建议执行以下操作:
- 主动监控错误日志:每小时
tail -f查看异常。 - 演练回滚流程:确保上一版本代码包仍在服务器中,若出现致命漏洞,能在 10 分钟内
rsync回滚。 - 观察并发峰值:若出现响应变慢,优先检查慢查询日志,而非直接重启 PHP-FPM。
写给你的最后一句话:这份清单不是为了“走过场”,而是为了让你在深夜里收到告警短信时,能从容地打开备查文档——上面每一个勾选,都是你为自己赢得的一分安心,请复制粘贴这份清单,结合你的业务形态进行增删,祝你的项目上线后零故障、稳如老狗。