gpt4 book ai didi

php - 如何设置类似于 Laravel 的单一入口点架构?

转载 作者:行者123 更新时间:2023-12-02 17:42:50 27 4
gpt4 key购买 nike

尽管我努力寻找有关如何为使用 PHP 构建的 Web 应用程序设置安全的单一入口点体系结构的教程,但我一直找不到合适的教程。谁知道,也许我的搜索查询很糟糕......查看 Laravel 的代码似乎是个好主意,但这是让您头晕目眩的好方法。那里发生的事情太多了,我无法理解。

话虽这么说,我将如何着手创建这样一个既易于应用到应用程序又安全(例如防止本地文件包含)的架构?

最佳答案

首先,您需要将所有请求重定向到一个 PHP 文件。您在 Apache 或其他服务器上的 .htaccess 中执行的那部分。

然后您需要探索在$_SERVER 中可以看到哪些数据.使用 $_SERVER['PATH_INFO'] 很常见,但选择将取决于您重写请求的准确程度。

然后你需要创建一个路由器,它有一个正则表达式列表,然后尝试匹配你获得的 URL 片段。

这里有几个例子可能会给你一些想法:

  • '#^/(?P<page>[^/\\\\.,;?\n]+)$#'
  • '#^/user/(?P<id>[0-9]+)/(?P<nickname>[^/\.,;?\n]+)$#'
  • '#^(?:/test/(?P<parameter>[^/\\\\.,;?\n]+))?/mandatory$#'

通常的做法是从更简单的符号生成这些正则表达式,但对于第一次迭代,您不应该过分关注它。

此外,如果您使用具有可选片段的表达式,您还应该提供“后备”值。如果未提供片段但匹配模式,则这些值将用作默认值。

在 PHP 中我做这一切的方式看起来像这样:

/*
* Routing mechanism
*/

$uri = isset( $_SERVER[ 'PATH_INFO' ] )
? $_SERVER[ 'PATH_INFO' ]
: '/';

$builder = new RequestBuilder;
$request = $builder->create();
$request->setUri( $uri );

$router = new Router( new RouteBuilder );
$router->import(
$reader->getAsArray( __DIR__ . '/config/routes.json' )
);

$router->route( $request );

在此之后 $request变量包含一个对象,然后您可以使用 $id = $request->getParameter('id') 等命令查询特定参数或 $controller = $request->getParameter('controller') .

如果您不弄乱模式本身,那么您提取的值将是安全的,不会包含未经授权的文件。

关于php - 如何设置类似于 Laravel 的单一入口点架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18415681/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com