phpEnv迁移后必须触发「软件初始化」重写配置文件路径,否则Apache、MySQL因硬编码的绝对路径(如C:\phpenv\www)和auto.cnf中的重复UUID而启动失败;初始化会更新DocumentRoot、PHPIniDir、LoadModule路径及my.ini中的basedir/datadir,但不修改ServerName和路径盘符,需人工校验。

phpEnv 环境迁移后必须重写的配置文件
直接复制整个 phpenv 目录到新电脑,php.ini、httpd.conf、my.ini 里的路径不会自动更新——它们硬编码了旧机器的绝对路径,比如 C:\phpenv\www 或 C:/phpenv/php/php-8.2.12。不触发「软件初始化」,Apache 启动就报 Cannot load module,MySQL 直接拒绝启动。
- 关键路径字段必须靠初始化重写:包括
DocumentRoot、PHPIniDir、LoadModule php_module指向的 DLL 路径、my.ini中的basedir和datadir -
auto.cnf必须删掉:它在data\mysql\data\下,含唯一 UUID,重复会导致 MySQL 报错Server UUID is not unique - 初始化不碰
httpd-vhosts.conf里的ServerName和DocumentRoot值,但会把路径部分(如C:/phpenv/www/demo)替换成新路径,所以你得确认里面没写死盘符
composer.lock 对应的 PHP 平台配置要匹配
composer install 会读 composer.lock 顶部的 "platform" 字段,比如 "php": ">=8.1.0" 或 "ext-mbstring": "true"。PHP 8.5.5 虽兼容大部分扩展,但某些旧扩展(如 mysql_*)已被彻底移除,composer install 会跳过或报错。
- 检查
composer.lock是否含已废弃扩展声明,例如"ext-mysql"—— 这类条目在 PHP 8.5.5 下无效,需手动删掉或替换为mysqli -
php -v输出必须满足platform.php要求;若 lock 文件写的是"php": "^8.2",而你本地是8.5.5,没问题;但如果是"php": ",就会拒绝安装 -
extension=mbstring、extension=pdo_mysql这些必须在新环境的php.ini中启用,否则composer install可能中途失败并提示ext-pdo_mysql is missing
Laravel Migrator 初始化时连接配置不能写死 IP 或端口
用 Illuminate\Database\Capsule\Manager 手动驱动迁移时,如果原项目数据库连的是 192.168.1.100:3307,而新环境 MySQL 在本地 127.0.0.1:3306,不改配置就会卡在 Connection refused。
- 连接数组里
'host'、'port'、'database'、'username'都得按新环境重填,不能复用旧值 -
'driver' => 'mysql'没问题,但若旧项目用了sqlite或pgsql,PHP 8.5.5 下需确认对应扩展已启用(pdo_sqlite默认开,pdo_pgsql需手动打开) - 迁移文件中若用了
Schema::create()却报Call to undefined function Schema::create(),说明vendor/autoload.php没加载成功,或Illuminate\Support\Facades\Schema未被正确 alias —— 此时别硬改,先确认use Illuminate\Support\Facades\Schema;在迁移文件顶部
PHP 8.5.5 动态属性和魔术方法需显式声明
不是配置文件要改,而是代码本身在 PHP 8.5.5 下会直接崩溃:没声明属性却动态赋值、用了 __sleep()、传 null 给 array_key_exists(),这些都会触发 Fatal error 或 Deprecated 警告(取决于错误报告级别)。
立即学习“PHP免费学习笔记(深入)”;
- 类里动态加属性?补上
#[AllowDynamicProperties]注解,或提前声明public $name; - 还在用
__sleep()?换成__serialize(),返回键名数组;__wakeup()改成__unserialize(),参数是反序列化后的数据 -
shell_exec(`ls`)会报错 —— 反引号语法已移除,统一换shell_exec('ls')
真正容易被忽略的不是哪几行配置要改,而是「初始化」和「平台匹配」这两步必须做全:漏掉 init.txt 或没清 auto.cnf,服务起不来;漏看 composer.lock 里的 platform 或扩展依赖,vendor 一半装一半,autoload 就乱套。



















