当前位置:首页 > PHP

php实现httprouter

2026-01-29 13:27:23PHP

PHP 实现 HTTP 路由

在 PHP 中实现 HTTP 路由可以通过多种方式完成,以下是几种常见的方法:

使用原生 PHP 实现简单路由

通过解析 $_SERVER['REQUEST_URI'] 实现基本路由:

$request = $_SERVER['REQUEST_URI'];

switch ($request) {
    case '/':
        require 'home.php';
        break;
    case '/about':
        require 'about.php';
        break;
    default:
        http_response_code(404);
        require '404.php';
        break;
}

使用正则表达式实现动态路由

支持带参数的动态路由:

$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

if (preg_match('#^/user/(\d+)$#', $uri, $matches)) {
    $userId = $matches[1];
    require 'user_profile.php';
} elseif ($uri === '/contact') {
    require 'contact.php';
} else {
    http_response_code(404);
    require '404.php';
}

使用 Composer 包实现高级路由

安装流行的路由包如 nikic/FastRoute

php实现httprouter

composer require nikic/fast-route

示例用法:

require 'vendor/autoload.php';

$dispatcher = FastRoute\simpleDispatcher(function(FastRoute\RouteCollector $r) {
    $r->addRoute('GET', '/', 'HomeController@index');
    $r->addRoute('GET', '/user/{id:\d+}', 'UserController@show');
});

$httpMethod = $_SERVER['REQUEST_METHOD'];
$uri = $_SERVER['REQUEST_URI'];

$routeInfo = $dispatcher->dispatch($httpMethod, $uri);
switch ($routeInfo[0]) {
    case FastRoute\Dispatcher::NOT_FOUND:
        // 404处理
        break;
    case FastRoute\Dispatcher::METHOD_NOT_ALLOWED:
        // 405处理
        break;
    case FastRoute\Dispatcher::FOUND:
        $handler = $routeInfo[1];
        $vars = $routeInfo[2];
        // 调用控制器方法
        break;
}

使用 Slim 框架的路由

安装 Slim 框架:

php实现httprouter

composer require slim/slim

路由示例:

require 'vendor/autoload.php';

$app = new \Slim\App;
$app->get('/', function ($request, $response) {
    return $response->write('Home Page');
});
$app->get('/user/{id}', function ($request, $response, $args) {
    return $response->write("User ID: " . $args['id']);
});
$app->run();

实现 RESTful API 路由

处理不同 HTTP 方法的路由:

$method = $_SERVER['REQUEST_METHOD'];
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

if ($method === 'GET' && $uri === '/api/users') {
    // 获取用户列表
} elseif ($method === 'POST' && $uri === '/api/users') {
    // 创建用户
} elseif ($method === 'PUT' && preg_match('#^/api/users/(\d+)$#', $uri, $matches)) {
    // 更新用户
} elseif ($method === 'DELETE' && preg_match('#^/api/users/(\d+)$#', $uri, $matches)) {
    // 删除用户
} else {
    http_response_code(404);
    echo json_encode(['error' => 'Not Found']);
}

路由缓存优化

对于生产环境,可以考虑缓存路由配置以提高性能:

$dispatcher = FastRoute\cachedDispatcher(function(FastRoute\RouteCollector $r) {
    // 路由配置
}, [
    'cacheFile' => __DIR__ . '/route.cache',
    'cacheDisabled' => false, // 开发环境设为true
]);

以上方法涵盖了从简单到复杂的各种路由实现方式,可以根据项目需求选择合适的方案。

标签: phphttprouter
分享给朋友:

相关文章

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

php实现注册登录

php实现注册登录

PHP 注册功能实现 创建数据库表(以 MySQL 为例) CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, usern…

php登陆功能实现

php登陆功能实现

实现PHP登录功能 数据库准备 创建一个用户表存储登录信息,基本字段包括用户名、密码(需加密)等: CREATE TABLE users ( id INT AUTO_INCREMENT PR…

php 购物车实现session

php 购物车实现session

PHP 购物车实现(基于 Session) 在 PHP 中,使用 Session 实现购物车功能是一种常见方法。Session 可以跨页面存储用户数据,适合临时保存购物车信息。 初始化 Sessio…

php无法实现的

php无法实现的

PHP 的局限性 PHP 是一种广泛使用的服务器端脚本语言,主要用于 Web 开发。尽管功能强大,但在某些场景下存在局限性。 操作系统级开发 PHP 不适合编写操作系统内核或底层驱动程序。这类任务通…