本文目录导读:

PHP 项目的多入口模式(通常指在一个项目中包含多个 index.php、api.php、admin.php 等不同的入口文件)在复杂系统、前后端分离、功能模块化的场景下非常适用。
以下场景非常适合使用多入口模式:
前后端完全分离的架构
这是目前最主流的场景。
- 场景描述:前端(Vue/React/App)和后端(PHP)完全解耦,前端通过 HTTP API 或 WebSocket 与后端交互。
- 多入口设计:
api.php:专门处理 RESTful API 请求,输出 JSON/XML 格式的数据。ws.php:处理 WebSocket 长连接请求。www/index.php:处理后台管理系统页面请求。
- 优势:
- 可以针对
api.php设置不同的 CORS 跨域策略、认证机制(API Key、OAuth2)。 - 优化:可以为
api.php配置独立的 FPM 进程池,专门处理高并发、短连接的 API 请求,而不影响前台的静态页面或其他模块。
- 可以针对
后台管理与前台展示分离
- 场景描述:项目包含面向普通用户的前台(www)和面向管理员的后台管理(admin)。
- 多入口设计:
public/index.php:前台入口,使用前台视图模板,加载前台中间件(如 CSRF 保护、页面缓存)。admin/index.php:后台入口,使用后台视图模板,加载不同的中间件(如权限检查、操作日志记录、对管理员专用的文件上传处理)。
- 优势:
- 安全隔离:后台入口可以设置更严格的 IP 限制、Session 超时策略或两阶段验证,而前台入口则采用更灵活的策略。
- 性能分离:后台通常访问量小但逻辑重,前台访问量大但逻辑轻,可以为
admin.php设置更长的 PHP 执行时间限制(max_execution_time),而不影响前台。
多租户(SaaS) 或 多服务端开放平台
- 场景描述:一个 PHP 项目需要为不同类型的客户端(Web、iOS、Android、第三方开发者)提供服务。
- 多入口设计:
app.php:处理 App 端请求,使用特定接口签名算法(如 HMAC-SHA256)。open.php:处理第三方开放平台 API 请求,负责 OAuth2 授权、Rate Limiting 和签名校验。www.php:处理浏览器端常规网页请求。
- 优势:
- 不同的客户端可以通过不同的入口接入,使用不同的认证流程。
- 便于维护:
open.php的改动不会影响app.php或www.php的逻辑。
命令控制与web请求隔离
- 场景描述:项目需要同时处理常规的 Web 请求和后台异步任务调度(如队列消费、定时脚本)。
- 多入口设计:
public/index.php:Web 请求入口,负责快速响应。artisan或console.php(类似 Laravel):命令行入口,用于执行耗时任务(发送邮件、生成报表)。cron.php:定时任务入口,专门执行短周期任务。
- 优势:
- 避免在 Web 请求中处理耗时逻辑导致超时或阻塞。
- 命令行入口通常不启动 Session,减少不必要的资源开销。
微服务框架下的网关/服务分组入口
- 场景描述:虽然 PHP 单体应用较少,但在一些轻量级微服务项目中,可以将不同业务模块拆分为不同入口。
- 多入口设计:
auth.php:认证服务入口。order.php:订单业务入口。pay.php:支付回调入口。
- 优势:
- 模块解耦:不同入口代码完全独立,甚至可以部署在不同服务器上。
- 单点性能调整:
order.php出现性能瓶颈,可以单独为其开启更多 PHP-FPM 进程,或为其配置专门的 OPCache 内存,而不影响其他服务。
适用场景的核心特征
当你的项目具备以下至少一点时,强烈推荐使用多入口模式:
- 接口格式差异大:有的返回 JSON(API),有的返回 HTML(Web 页面),有的返回纯文本(WebSocket 握手)。
- 认证机制不同:API 用 Token(JWT),网站用 Session + Cookie,内部工具用 IP 白名单。
- 安全等级不同:管理后台、支付回调等需要最高等级安全配置(如严格 CORS 限制)。
- 性能/资源要求不同:API 需要高并发(短连接、无 Session),管理后台需要低延迟(需要 Session 持久化)。
- 开发协作隔离:不同团队负责不同入口(如前端团队负责 API 入口,后端团队负责 Web 入口)。
不适用多入口的场景
如果项目只是一个小型博客或简单的企业展示网站(单一 Web 访问方式、用户角色简单、所有请求格式一致),那么单入口(单一入口 + 路由分发)模式会更简单、更易维护,单入口模式也是现代主流 PHP 框架(Laravel、Symfony、ThinkPHP)的默认模式,通过路由规则已经可以处理大多数逻辑。