环境配置差异清单
发布时间:2026-05-31 18:16       
更新时间:2026-06-01 13:55
程序在新服务器上跑不起来,八成是环境配置对不上。差异归纳起来无非四类:版本、扩展、参数、路径。迁移前照着清单对一遍,能挡掉大部分"在我电脑上是好的"。
版本差异
最隐蔽的一类。PHP 7.4 和 8.x 的语法兼容差异不小,老程序在新版本上直接白屏的情况很常见;MySQL 5.7 与 8.0 的默认字符集、认证方式也不同。核对命令:php -v、mysql --version、nginx -v,新旧两台的输出放一起看。大版本一致是底线,PHP 最好连小版本都对齐。指定版本安装要会写:Ubuntu 上 apt install php7.4-fpm,CentOS 配好 Remi 源后 dnf install php74-php-fpm,装错大版本后面全白搭。PHP 还要注意线程安全选项,模块化方式跑 apache 用 TS 版,fpm 方式跑用 NTS 版,装反了扩展直接加载失败。
扩展差异
程序依赖的 PHP 扩展缺一个就报 fatal error。两台机器各跑 php -m,排完序 diff 一下:
diff <(ssh 老机 php -m | sort) <(php -m | sort)
常见的坑有 fileinfo、redis、bcmath、gd 这几个,缺哪个补哪个。
参数差异
php.ini 里的 memory_limit、upload_max_filesize、post_max_size,MySQL 的 max_allowed_packet、innodb_buffer_pool_size,这些参数在两套环境的默认值经常不同。上传大文件失败、导入大 SQL 中断,多半栽在这里。用 php -i | grep memory_limit 这类命令逐项对比,不一致的照老机改。php.ini 的实际路径用 php --ini 查,一台机器常有 cli 和 fpm 两份配置,改了这份漏那份是高频错误。对比参数还有个省事的办法:php -i 全量导出存成文件,新旧两份丢给 diff,差异行一目了然。
路径差异
代码里写死的绝对路径、nginx 的 root、运行用户(www-data 还是 www)都会出问题。上传目录写死成 /home/wwwroot/upload 而新机没有这个路径,功能直接失效。迁移前 grep 一遍代码里的绝对路径,逐个确认在新机上存在且权限正确。session 存储路径和临时上传目录也要核,session.save_path 指向的目录不存在,登录状态会莫名其妙丢。nginx 配置里的 include 文件和 open_basedir 限制也过一眼,后者圈定了可访问目录,新路径要写进白名单才生效。
清单对完,把老机的 phpinfo 页面存成文件带走。遇到玄学问题时逐项比对,比凭记忆回忆快得多。两台机器的配置文件各打一个包留档:tar -czf etc_backup.tar.gz /etc/php /etc/nginx /etc/my.cnf,比对和回滚都靠它。