PHP 项目上线检查清单

wen PHP项目 3

PHP 项目上线检查清单:从开发到生产的终极指南

目录导读

  1. 为什么需要上线检查清单?
  2. 环境配置与服务器检查
  3. 代码与依赖项审查
  4. 安全加固:不可忽视的防线
  5. 性能优化与缓存策略
  6. 数据库迁移与备份验证
  7. 日志、监控与错误处理
  8. 常见问题问答(FAQ)
  9. 上线后的24小时黄金法则

为什么需要上线检查清单?

PHP 项目上线是“从0到1”的关键一跃,一次失败的部署可能导致数据丢失、安全漏洞甚至业务中断,根据统计,70%的上线事故源于人为疏忽——忘记修改配置、未关闭调试模式、未清理测试数据等,检查清单不是束缚,而是防止低级错误的最后一道防线,它能将“我以为我检查了”变成“我确认我检查了”。

PHP 项目上线检查清单

环境配置与服务器检查

  • PHP 版本匹配:生产环境必须与开发环境使用完全一致的主版本(8.2.x),否则潜在函数行为差异会导致“本地正常、线上报错”。
  • 扩展启用:执行 php -m 确认 PDOOpCacheRedis(如有)等扩展已安装,缺失扩展是上线后最常见的“空错误”。
  • 错误显示关闭:在 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=productionAPP_DEBUG=false,若使用框架(Laravel/ThinkPHP),需执行 php artisan config:cache 让配置生效。

安全加固:不可忽视的防线

  • 目录权限最小化:网站根目录外的文件(如 .envstorage/)建议设 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。

写给你的最后一句话:这份清单不是为了“走过场”,而是为了让你在深夜里收到告警短信时,能从容地打开备查文档——上面每一个勾选,都是你为自己赢得的一分安心,请复制粘贴这份清单,结合你的业务形态进行增删,祝你的项目上线后零故障、稳如老狗。

抱歉,评论功能暂时关闭!