php实现单一入口
PHP 单一入口实现方法
单一入口(Single Entry Point)是一种设计模式,通过一个入口文件(如index.php)集中处理所有请求,实现路由分发、统一初始化等操作。以下是实现方法:
创建入口文件
在项目根目录创建index.php文件,作为唯一入口:
<?php
// 定义常量
define('APP_PATH', __DIR__ . '/app');
define('PUBLIC_PATH', __DIR__);
// 加载框架或初始化文件
require APP_PATH . '/bootstrap.php';
// 路由处理
$requestUri = $_SERVER['REQUEST_URI'];
$router = new Router();
$router->dispatch($requestUri);
配置服务器重定向
Apache服务器需配置.htaccess文件实现URL重写:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
Nginx服务器需在配置中添加:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
路由解析实现 创建路由类处理请求分发:
class Router {
public function dispatch($uri) {
// 去除查询字符串和前后斜杠
$uri = parse_url($uri, PHP_URL_PATH);
$uri = trim($uri, '/');
// 默认路由
if (empty($uri)) {
$controller = 'Home';
$action = 'index';
} else {
$parts = explode('/', $uri);
$controller = ucfirst($parts[0] ?? 'Home');
$action = $parts[1] ?? 'index';
}
// 控制器类名
$controllerClass = $controller . 'Controller';
// 检查并执行
if (class_exists($controllerClass)) {
$controllerInstance = new $controllerClass();
if (method_exists($controllerInstance, $action)) {
$controllerInstance->$action();
return;
}
}
// 404处理
header("HTTP/1.0 404 Not Found");
echo '404 Not Found';
}
}
目录结构建议
/project-root
├── app/ # 应用代码
│ ├── Controllers/
│ ├── Models/
│ ├── Views/
│ └── bootstrap.php
├── public/ # 公开目录
│ ├── assets/
│ └── index.php # 单一入口文件
├── vendor/ # 依赖库
└── .htaccess # 重写规则
安全注意事项
- 过滤用户输入的URL参数
- 对控制器和动作名进行白名单验证
- 设置合理的错误报告级别
- 禁用目录遍历
性能优化建议
- 使用OPcache加速
- 合理配置路由缓存
- 避免在入口文件进行繁重的初始化操作
这种实现方式常见于框架如Laravel、Symfony等,也可根据项目需求调整路由解析逻辑或引入更复杂的路由组件。







