yii3项目迁移到linux需三步:统一文件名小写并修正路径拼接;安装intl、mbstring等缺失扩展并确认php.ini生效;设置runtime和assets目录权限为775且属组为www-data或nginx。

将Yii3项目从Mac本地开发环境迁移到Linux生产服务器时,常因路径分隔符、文件权限、PHP扩展差异导致白屏、路由失效或数据库连接失败。
修正路径分隔符与文件系统敏感性
Mac默认使用HFS+或APFS文件系统,不区分大小写;Linux(ext4/xfs)严格区分大小写。Yii3中控制器类名、视图文件名、命名空间路径若大小写混用,在Mac能正常加载,部署到Linux后直接报Class not found或View file not exists错误。
第一步:在Mac端终端执行find ./src -name "*[A-Z]*" -type f | grep -E "\.(php|php)$",定位所有含大写字母的文件名。
第二步:统一重命名为全小写+连字符风格,例如UserProfileController.php → user-profile-controller.php,同时同步修改use语句和路由配置中的类引用。
第三步:检查config/web.php中aliases定义,确保所有路径使用 DIRECTORY_SEPARATOR 拼接,禁用硬编码/或\。Yii3已内置Yii::getAlias('@app') . DIRECTORY_SEPARATOR . 'views'模式,直接调用即可。
处理PHP扩展与配置差异
Mac通过Homebrew安装的PHP常启用opcache、intl、mbstring等扩展,但Linux服务器(尤其CentOS/RHEL系)默认可能缺失intl或pdo_mysql,导致迁移后抛出Class 'IntlDateFormatter' not found或Driver not found异常。
方法一(Ubuntu/Debian):sudo apt update && sudo apt install php-intl php-mbstring php-pdo php-mysql,安装后执行sudo systemctl restart apache2或sudo systemctl restart php8.1-fpm。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
方法二(CentOS/RHEL 8+):sudo dnf install php-intl php-mbstring php-pdo php-mysqlnd,注意mysql扩展已废弃,必须用mysqlnd替代。
【关键前提】执行php -m | grep -E "intl|mbstring|pdo"确认扩展已启用,再运行php -i | grep "Loaded Configuration File"核对当前生效的php.ini路径,避免改错配置文件。
修复文件权限与Web服务器用户隔离
Mac上Apache或Nginx通常以当前用户身份运行,读写runtime、web/assets目录无压力;Linux生产环境强制要求Web进程(如www-data或nginx)拥有这些目录的写权限,否则日志无法生成、资源无法发布、缓存写入失败。
进入项目根目录,执行:sudo chown -R :www-data runtime web/assets(Ubuntu/Debian)或sudo chown -R :nginx runtime web/assets(CentOS/RHEL)。
设置目录权限为775,文件权限为664:find runtime web/assets -type d -exec chmod 775 {} \; && find runtime web/assets -type f -exec chmod 664 {} \;。
最后一步:在config/web.php中显式指定'runtimePath' => '@app/runtime'和'assetManager' => ['basePath' => '@webroot/assets'],避免因环境变量差异导致路径解析错误。










