应用笔记 / 经验分享 · 2023年2月19日

PHP Yii框架 500错误: Can’t find ‘\\saler\IndexController’ in ‘/www/api/saler/IndexController.php’, Missing Namespace?

这个问题出现的很蹊跷,在本地环境下调试一切正常,上传服务器就出现错误。

本地环境: Windows11+PhpStudy搭建, Nginx 1.5+Mysql 5.7+ PHP 7.3.4, 开发环境PhpStorm 2023;

服务器环境:Ubuntu 20.0.4 + 宝塔 7,Nginx 1.5+Mysql 5.7+ PHP 7.3.4,

排除了数据库结构不同步问题,文件大小写问题、BOM文件头问题,重传了多次程序故障依旧。最后急中生智,使用宝塔的文件编辑功能打开 /www/api/saler/IndexController.php,从本地PhpStorm中全选复制该文件内容,在宝塔粘贴,问题解决。

不甘心,试图找到问题关键在哪儿。将服务器版本下载,与本地版本使用UltraCompare二进制模式比较,发现其中差别:

本地版本(UC下半部分)在 <?php 和 namespace saler; 之间,多了两个  0D 0A 回车换行符,而服务器版本只有两个 0A,这个容易理解,linux和windows之间换行符的区别嘛,搞不懂为什么PHP不认了?

于是怀疑PhpStorm保存时造成了错误,于是将服务器版本用PhpStorm打开编辑了一下并保存,上传该版本后仍然工作正常。

不想再折腾了,脑壳疼。这里记下来,给遇到类似问题的朋友们一个思路。