# PHP 服务器超时问题解决 ## 🔍 问题诊断结果 ### 发现的问题 1. **多个 PHP 进程同时运行** - 发现 2 个 PHP 进程(PID: 14076, 22776) - 都在监听 30100 端口 - 导致端口冲突和资源竞争 2. **大量半关闭连接** - 多个 `CLOSE_WAIT` 状态的连接 - 多个 `FIN_WAIT_2` 状态的连接 - 说明连接没有正常关闭,资源耗尽 3. **Python 也有多个进程** - 发现 2 个 Python 进程(PID: 12040, 19024) - 可能是之前启动失败后没有清理 ### 根本原因 **重复启动服务导致的端口冲突和资源耗尽:** - 多次运行启动脚本 - 旧进程没有正确关闭 - 新进程无法正常工作 - 连接堆积导致超时 ## ✅ 已执行的修复 已经停止了所有旧的进程: ```powershell Stop-Process -Id 14076,22776 -Force # PHP 进程 Stop-Process -Id 12040,19024 -Force # Python 进程 ``` 端口已完全释放,可以重新启动服务。 ## 🚀 正确的启动流程 ### 方法 1:使用启动脚本(推荐) **启动脚本会自动清理旧进程:** 1. 双击运行 `启动项目.bat` 2. 脚本会自动: - 检查并终止占用端口的旧进程 - 等待端口释放 - 启动 PHP 服务器(30100) - 启动 Python 服务器(30101) ### 方法 2:手动启动 **如果需要手动启动:** 1. **先清理旧进程:** ```powershell # 查找占用端口的进程 netstat -ano | Select-String ":30100" netstat -ano | Select-String ":30101" # 停止进程(替换为实际的 PID) Stop-Process -Id -Force ``` 2. **启动 PHP 服务器:** ```cmd cd xunifriend_RaeeC\public php -S 0.0.0.0:30100 router.php ``` 3. **启动 Python 服务器:** ```cmd python -m uvicorn lover.main:app --host 0.0.0.0 --port 30101 --reload ``` ## 🔧 避免问题的最佳实践 ### 1. 启动前检查 **每次启动前先检查端口:** ```powershell netstat -ano | Select-String ":30100" netstat -ano | Select-String ":30101" ``` 如果有输出,说明端口被占用,需要先停止旧进程。 ### 2. 正确停止服务 **不要直接关闭窗口,而是:** - 在服务器窗口中按 `Ctrl+C` - 等待服务正常退出 - 或者使用任务管理器结束进程 ### 3. 使用启动脚本 **启动脚本的优势:** - 自动检测并清理旧进程 - 自动等待端口释放 - 在独立窗口中运行,便于查看日志 - 出错时容易定位问题 ### 4. 定期清理 **如果遇到问题,可以手动清理:** ```powershell # 停止所有 PHP 进程 Get-Process | Where-Object {$_.ProcessName -eq "php"} | Stop-Process -Force # 停止所有 Python 进程(注意:会停止所有 Python 程序) Get-Process | Where-Object {$_.ProcessName -eq "python"} | Stop-Process -Force ``` ## 📊 验证服务是否正常 ### 1. 检查进程 ```powershell # 应该只有 1 个 PHP 进程 Get-Process | Where-Object {$_.ProcessName -eq "php"} # 应该只有 1 个 Python 进程(或 2 个,如果有其他 Python 程序) Get-Process | Where-Object {$_.ProcessName -eq "python"} ``` ### 2. 检查端口 ```powershell # 应该只有 1 个 LISTENING 状态 netstat -ano | Select-String ":30100" | Select-String "LISTENING" netstat -ano | Select-String ":30101" | Select-String "LISTENING" ``` ### 3. 测试访问 **PHP 服务器:** ``` http://127.0.0.1:30100/test_api.php ``` **Python 服务器:** ``` http://127.0.0.1:30101/docs ``` ## 🐛 常见问题 ### 问题 1:启动脚本无法清理旧进程 **症状:** - 启动脚本运行后还是有多个进程 - 端口还是被占用 **解决:** 手动停止所有进程: ```powershell Get-Process | Where-Object {$_.ProcessName -eq "php"} | Stop-Process -Force Get-Process | Where-Object {$_.ProcessName -eq "python"} | Stop-Process -Force ``` ### 问题 2:PHP 服务器启动后立即退出 **症状:** - PHP 窗口一闪而过 - 端口没有被监听 **可能原因:** - PHP 路径配置错误 - router.php 文件不存在 - 端口被其他程序占用 **解决:** 1. 检查 `启动项目.bat` 中的 `PHP_PATH` 配置 2. 确认 `xunifriend_RaeeC\public\router.php` 存在 3. 尝试手动启动查看错误信息 ### 问题 3:Python 服务器无法连接 PHP **症状:** - Python 日志显示 "请求超时" - PHP 服务器正常运行 **可能原因:** - PHP 服务器响应慢 - 防火墙阻止本地连接 - PHP 代码有错误 **解决:** 1. 在浏览器中测试 PHP 接口: ``` http://127.0.0.1:30100/api/user_basic/get_user_basic ``` 2. 查看 PHP 服务器窗口的错误日志 3. 检查 PHP 代码是否有语法错误 ## 📝 下一步 现在所有旧进程已清理,请: 1. **重新启动服务:** - 双击运行 `启动项目.bat` - 或者手动启动 PHP 和 Python 服务器 2. **验证服务正常:** - 访问 http://127.0.0.1:30100 - 访问 http://127.0.0.1:30101/docs 3. **测试语音通话:** - 打开 App - 进入语音通话页面 - 测试功能 4. **观察日志:** - 不应该再有 "请求超时" 错误 - 应该能正常获取用户信息 --- **问题:** PHP 服务器超时 **原因:** 多个进程同时运行,端口冲突,连接堆积 **解决:** 停止所有旧进程,重新启动 **状态:** ✅ 已清理,可以重新启动