PHP环境迁移本质是同步代码、配置和外部状态三类依赖,数据库需用mysqldump/pg_dump导出导入,严禁仅复制配置文件;导出须加--single-transaction,导入前核对字符集,大SQL文件禁用PHP逐行执行。

PHP 本身不直接处理环境数据迁移,真正要迁移的是 PHP 运行所依赖的三类东西:代码、配置、外部状态(数据库、缓存、文件)。所谓“迁移环境数据”,本质是同步这三者的差异,而不是执行某个叫 php migrate 的命令。
数据库内容导出与导入必须用对应 DB 工具
PHP 应用的数据几乎都存在 MySQL/PostgreSQL 等外部数据库中,php 脚本不能替代 mysqldump 或 pg_dump。常见错误是只复制 config.php 就以为数据也跟着过去了。
-
mysqldump -u root -p database_name > backup.sql导出时务必加--single-transaction(InnoDB)或--lock-tables=false,否则线上库可能被锁 - 导入前确认目标库字符集一致,尤其是
utf8mb4和utf8混用会导致中文乱码,检查用SHOW CREATE DATABASE database_name; - 不要用 PHP 的
mysqli::query()逐行执行大 SQL 文件——内存溢出、超时、无事务保障;应调用系统命令mysql -u user -p database_name
.env 和 php.ini 文件必须手动核对差异
PHP 应用的行为高度依赖环境变量和 PHP 配置,但这两类文件不会自动同步。Laravel 的 .env、WordPress 的 wp-config.php、或全局 /etc/php/8.2/apache2/php.ini 都得逐项比对。
-
diff .env.local .env.production查看开发与生产环境变量差异,重点关注APP_ENV、DB_HOST、REDIS_HOST、MAIL_MAILER -
php --ini找到当前生效的php.ini路径,再用php -m确认扩展是否启用(如opcache在生产必须开,xdebug在生产必须关) - 修改
php.ini后必须重启 Web 服务(sudo systemctl restart apache2或sudo systemctl restart php8.2-fpm),仅 reload 不生效
文件上传目录、缓存路径、日志权限容易被忽略
迁移后常见 500 错误,往往不是代码问题,而是 PHP 进程没权限写入指定路径。比如 Laravel 的 storage/、ThinkPHP 的 runtime/、或自定义的 uploads/ 目录。
立即学习“PHP免费学习笔记(深入)”;
- 用
ps aux | grep apache2或ps aux | grep php-fpm确认 Web 进程运行用户(常见为www-data或nginx) - 执行
chown -R www-data:www-data storage/ bootstrap/cache/(Laravel 示例),注意不要递归改整个项目目录 - 日志路径若指向
/var/log/myapp/,需提前创建目录并赋权:sudo mkdir -p /var/log/myapp && sudo chown www-data:www-data /var/log/myapp
最麻烦的从来不是复制文件,而是确认「哪些地方硬编码了路径、IP 或密钥」——比如数据库连接写死在 index.php 里,又比如 Redis 密码明文写在 config/cache.php 中。这类代码必须先解耦,再迁移。










