laravel跨平台部署需统一php版本与扩展、处理大小写敏感、隔离环境配置、校准nginx规则及目录权限。windows用directory_separator替换硬编码斜杠,linux用apt安装扩展并设置www-data权限,.env不提交且app_env须设为production。

跨平台PHP框架部署不是换台服务器就能跑通的事——Windows开发好的Laravel项目扔到Linux上,可能首页白屏、登录404、数据库连不上、类找不到,根源全在路径写法、大小写、权限、扩展加载方式这些细节里。
统一PHP环境与扩展配置
先让两个系统用同一套PHP逻辑说话,否则后续所有操作都是空中楼阁。
在Windows上运行where php,删掉PATH中多余PHP路径(如C:\wamp64\php和C:\php同时存在时只留一个);Linux上执行sudo update-alternatives --config php选准版本。
两端都运行php --ini,打开显示的php.ini文件,确认extension_dir指向真实扩展目录:Windows是C:\php\ext,Linux是/usr/lib/php/20220829/;【extension_dir路径错位会导致所有扩展加载失败】。
必须启用的扩展:mbstring、pdo_mysql、openssl、xml、ctype、zip。Windows下取消php.ini中;extension=mbstring行前的分号;Linux用apt install php8.2-mbstring等命令安装后,扩展名自动生效。
date.timezone = "Asia/Shanghai"必须显式设置,否则Laravel日志报错、Carbon时间计算偏移。
处理大小写敏感与路径分隔符
Linux严格区分大小写,Windows不区分——这是迁移后最常触发Class not found错误的根源。
方法一:用DIRECTORY_SEPARATOR替换硬编码斜杠
把代码中所有require 'protected/controllers/SiteController.php'改成require 'protected' . DIRECTORY_SEPARATOR . 'controllers' . DIRECTORY_SEPARATOR . 'SiteController.php';【不改就必然在Linux报failed to open stream】。
方法二:批量检查命名一致性
Windows本地用PowerShell执行Get-ChildItem -Recurse -Filter "*.php" | ForEach-Object { $_.Name } | Sort-Object -Unique,对照类名引用是否完全一致;Linux服务器上直接find . -name "*.php" | xargs grep -l "MyClass\|myclass"定位混用大小写的文件。
方法三:开发阶段就规避
在Windows上用WSL2启动Ubuntu子系统,把项目挂载进去跑php artisan serve,日常调试即暴露大小写问题,不用等到上线才抓瞎。
配置文件与环境变量隔离
数据库密码、API密钥、APP_URL这些绝不能写死在代码里,更不能随git提交到远程仓库。
第一步:本地Windows保留.env,内容为DB_HOST=127.0.0.1、APP_URL=http://localhost:8000;
第二步:Linux服务器执行cp .env.example .env && php artisan key:generate;
第三步:用sed或脚本注入生产值:sed -i "s/DB_HOST=.*/DB_HOST=10.0.1.5/" .env;
第四步:确认.gitignore已含.env,若历史已提交则运行git rm --cached .env再commit。
APP_ENV=production必须设为系统级环境变量:Linux执行echo "export APP_ENV=production" >> /etc/profile && source /etc/profile;Windows在系统属性→高级→环境变量里添加。框架靠它决定加载哪套配置,不设就默认development,线上开着debug模式等于裸奔。
Nginx重写规则与权限校准
Windows常用Apache或PHP内置server,Linux生产环境基本用Nginx——规则不对,点个链接就404。
location /块必须包含try_files $uri $uri/ /index.php?$query_string;,少了$query_string参数URL会丢参;
location ~ \.php$块必须有fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;,否则$_SERVER['SCRIPT_FILENAME']指向错误导致路由解析失败。
storage和bootstrap/cache目录必须可写:Linux执行chown -R www-data:www-data storage bootstrap/cache && chmod -R 775 storage bootstrap/cache;
Windows无需chmod,但IIS或Apache服务账户要对这两个目录有修改权限。
最后一步:在Linux上运行php artisan config:clear → php artisan cache:clear → systemctl restart nginx,确保新配置生效。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











