# 🔧 故障排查指南 ## 当前问题:PHP 返回 500 错误 ### 问题现象 - 访问 http://127.0.0.1:30100 显示"您所浏览的页面暂时无法访问" - PHP 服务日志显示 `[500]: GET /index/user/index.html` --- ## 🔍 排查步骤 ### 第一步:运行诊断脚本 访问测试页面: ``` http://127.0.0.1:30100/test_db.php ``` 这个页面会检查: - ✅ PHP 版本和扩展 - ✅ 数据库连接 - ✅ 数据表列表 - ✅ ThinkPHP 框架文件 - ✅ Composer 依赖 - ✅ 目录权限 根据测试结果,找出具体问题。 --- ### 第二步:检查 Composer 依赖 最常见的问题是 Composer 依赖未安装。 **检查方法:** ```cmd cd xunifriend_RaeeC dir vendor ``` 如果 `vendor` 目录不存在或为空,需要安装依赖: ```cmd cd xunifriend_RaeeC composer install ``` **如果 composer 很慢,使用国内镜像:** ```cmd composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ composer install ``` --- ### 第三步:检查 PHP 扩展 **查看已加载的扩展:** ```cmd php -m ``` **必需的扩展:** - mysqli - pdo_mysql - mbstring - curl - openssl - fileinfo - json **如果缺少扩展,编辑 php.ini:** 1. 找到 PHP 安装目录下的 `php.ini` 文件 2. 搜索扩展名(如 `extension=mysqli`) 3. 删除前面的分号 `;` 取消注释 4. 保存文件 5. 重启 PHP 服务 --- ### 第四步:检查数据库连接 **测试数据库连接:** ```cmd mysql -u root -prootx77 -e "USE ai_friend; SELECT COUNT(*) FROM nf_user;" ``` **如果连接失败:** 1. **检查 MySQL 服务是否运行** ```cmd net start MySQL80 ``` 2. **检查密码是否正确** ```cmd mysql -u root -prootx77 ``` 3. **检查数据库是否存在** ```sql SHOW DATABASES; ``` 4. **如果数据库不存在,创建它** ```sql CREATE DATABASE ai_friend CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` --- ### 第五步:检查目录权限 **确保以下目录可写:** ``` xunifriend_RaeeC/runtime/ xunifriend_RaeeC/runtime/cache/ xunifriend_RaeeC/runtime/log/ xunifriend_RaeeC/public/uploads/ ``` **Windows 下通常不需要特殊设置,但可以检查:** 1. 右键点击目录 2. 选择"属性" 3. 取消"只读"属性(如果勾选了) --- ### 第六步:查看 PHP 错误日志 **查看 ThinkPHP 日志:** ``` xunifriend_RaeeC/runtime/log/ ``` 打开最新的日志文件,查看错误信息。 **常见错误及解决方法:** #### 错误 1: Class 'think\App' not found **原因:** Composer 依赖未安装 **解决:** ```cmd cd xunifriend_RaeeC composer install ``` #### 错误 2: SQLSTATE[HY000] [2002] Connection refused **原因:** 数据库连接失败 **解决:** 1. 检查 MySQL 服务是否运行 2. 检查 `.env` 文件中的数据库配置 3. 测试数据库连接 #### 错误 3: SQLSTATE[42S02]: Base table or view not found **原因:** 数据表不存在 **解决:** 1. 确认数据库已导入 2. 检查表前缀是否正确(nf_) #### 错误 4: Call to undefined function mysqli_connect() **原因:** mysqli 扩展未启用 **解决:** 1. 编辑 php.ini 2. 取消注释 `extension=mysqli` 3. 重启 PHP 服务 --- ## 🛠️ 快速修复方案 ### 方案 1:重新安装 Composer 依赖 ```cmd cd xunifriend_RaeeC rmdir /s /q vendor composer install ``` ### 方案 2:清理缓存 ```cmd cd xunifriend_RaeeC rmdir /s /q runtime\cache rmdir /s /q runtime\log mkdir runtime\cache mkdir runtime\log ``` ### 方案 3:重置数据库配置 编辑 `xunifriend_RaeeC/.env`,确保配置正确: ```env [database] type = mysql hostname = localhost database = ai_friend username = root password = rootx77 hostport = 3306 charset = utf8mb4 prefix = nf_ debug = true ``` ### 方案 4:使用简化的测试页面 访问:http://127.0.0.1:30100/test.php 查看是否能正常访问 PHP。 --- ## 📋 完整检查清单 按顺序检查以下项目: ### PHP 环境 - [ ] PHP 版本 >= 8.0 - [ ] php.ini 已配置 - [ ] 必需扩展已启用 - [ ] PHP 可以正常运行 ### Composer 依赖 - [ ] Composer 已安装 - [ ] vendor 目录存在 - [ ] 依赖包已安装完整 ### 数据库 - [ ] MySQL 服务运行中 - [ ] 数据库 ai_friend 存在 - [ ] 用户名密码正确 - [ ] 数据表已导入(30+ 张表) - [ ] 表前缀为 nf_ ### 配置文件 - [ ] xunifriend_RaeeC/.env 存在 - [ ] 数据库配置正确 - [ ] 字符集为 utf8mb4 ### 目录权限 - [ ] runtime 目录可写 - [ ] runtime/cache 目录可写 - [ ] runtime/log 目录可写 - [ ] public/uploads 目录可写 ### ThinkPHP 框架 - [ ] thinkphp 目录存在 - [ ] application 目录存在 - [ ] install.lock 文件存在 --- ## 🔄 重启服务 修改配置后,需要重启 PHP 服务: 1. 在 PHP 服务窗口按 `Ctrl+C` 停止 2. 重新运行启动脚本: ```cmd 启动项目.bat ``` 或者手动启动: ```cmd cd xunifriend_RaeeC\public php -S 0.0.0.0:30100 router.php ``` --- ## 📞 仍然无法解决? ### 1. 查看详细错误信息 在 `xunifriend_RaeeC/.env` 中启用调试模式: ```env app_debug = true app_trace = true ``` 重启服务后,错误信息会直接显示在浏览器中。 ### 2. 查看日志文件 ``` xunifriend_RaeeC/runtime/log/ ``` 打开最新的日志文件,查找错误堆栈。 ### 3. 使用测试脚本 访问:http://127.0.0.1:30100/test_db.php 查看详细的环境检查结果。 ### 4. 检查端口占用 ```cmd netstat -ano | findstr :30100 ``` 如果端口被占用,终止进程或更换端口。 --- ## ✅ 成功标志 当以下条件都满足时,说明 PHP 后台已正常运行: 1. ✅ 访问 http://127.0.0.1:30100 不再显示 500 错误 2. ✅ 访问 http://127.0.0.1:30100/test_db.php 显示所有检查通过 3. ✅ PHP 服务日志显示 `[200]` 状态码 4. ✅ 可以访问管理后台 http://127.0.0.1:30100/admin --- ## 🎯 下一步 PHP 后台正常运行后: 1. **测试 Python 后端** 访问:http://127.0.0.1:30101/docs 2. **测试 API 接口** 在 API 文档中测试各个接口 3. **访问管理后台** http://127.0.0.1:30100/admin 4. **开始开发** 根据需求修改代码 --- **记住:大多数 500 错误都是因为 Composer 依赖未安装!** 先运行 `composer install`,90% 的问题都能解决。