当前位置:首页 > 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

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 框架:

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
]);

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

php实现httprouter

标签: phphttprouter
分享给朋友:

相关文章

php实现文件上传

php实现文件上传

文件上传的基本实现 在PHP中实现文件上传需要使用$_FILES超全局数组处理上传的文件数据。表单必须设置enctype="multipart/form-data"属性,并采用POST方法提交。…

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

php实现排序

php实现排序

PHP 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $num…

php 购物车实现

php 购物车实现

数据库设计 购物车功能通常需要设计数据库表存储商品和用户信息。常见的表包括products(商品表)、users(用户表)和cart(购物车表)。cart表通常包含字段:id(主键)、user_id(…

基于php的设计与实现

基于php的设计与实现

PHP 设计与实现的关键要素 环境搭建与框架选择 PHP开发需配置服务器环境(如Apache/Nginx)、PHP版本(建议7.4+)及数据库(MySQL/MariaDB)。主流框架包括Laravel…

php搜索功能实现的

php搜索功能实现的

PHP 搜索功能实现方法 数据库搜索实现 使用 SQL 的 LIKE 语句进行模糊匹配,适用于小型网站和简单搜索需求。 $searchTerm = $_GET['search']; $query…