本地能跑的类换到 Linux 服务器后报找不到,Windows 上一切正常。日志里能对上时间点,这种反而好排。

Linux 文件系统区分大小写,命名空间路径与目录名大小写不一致就加载不到。这一点先确认清楚,后面就不用反复试。

composer dump-autoload -o
php -r "require 'vendor/autoload.php'; var_dump(class_exists('App\\Service\\OrderService'));"

这次卡住的地方就在「PHP 类自动加载失败」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。

把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

处理上按这个顺序:核对命名空间与目录结构逐级对应;文件名与类名保持一致;重新生成自动加载映射。

结果对不对很好判断,类加载返回 true,相关接口在服务器上正常返回数据。

作者 9823189