php单一入口实现
单一入口实现原理
单一入口(Single Entry Point)是一种设计模式,通过一个统一的入口文件(如index.php)处理所有请求,再根据路由规则分发到具体的功能模块。这种方式便于统一管理权限、日志、错误处理等公共逻辑。
实现步骤
创建入口文件
在项目根目录创建index.php,作为唯一入口文件。通过解析URL或参数决定调用哪个控制器和方法。
// index.php
require 'core/bootstrap.php';
$uri = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
$router = new Router();
$router->dispatch($uri);
URL重写配置
Apache需启用mod_rewrite,Nginx需配置重定向规则,将所有请求指向入口文件。
Apache示例(.htaccess):

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]
Nginx示例:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
路由解析 实现路由类处理URL映射,将请求分发到对应的控制器和方法。
class Router {
protected $routes = [];
public function add($uri, $controller) {
$this->routes[$uri] = $controller;
}
public function dispatch($uri) {
if (array_key_exists($uri, $this->routes)) {
require $this->routes[$uri];
} else {
http_response_code(404);
require 'views/404.php';
}
}
}
控制器加载 通过路由匹配后,加载对应的控制器文件并执行相应方法。

// routes.php
$router->add('', 'controllers/home.php');
$router->add('about', 'controllers/about.php');
高级优化
自动加载 使用Composer的PSR-4自动加载标准,避免手动引入文件。
// composer.json
{
"autoload": {
"psr-4": {
"App\\": "app/"
}
}
}
依赖注入 通过容器管理依赖关系,提升可测试性和扩展性。
$container = new Container();
$container->set('database', function() {
return new Database();
});
$controller = new HomeController($container->get('database'));
中间件支持 在路由前后添加中间件,统一处理请求和响应。
$router->add('admin', 'controllers/admin.php')
->middleware(new AuthMiddleware());
注意事项
- 确保服务器配置正确,避免直接访问其他PHP文件。
- 路由规则需考虑RESTful风格,支持参数化路径(如
/user/{id})。 - 对于高性能场景,可使用FastRoute等专业路由库替代自定义实现。
- 入口文件应做好安全过滤,防止路径遍历等攻击。






