拦截服务器响应并转发到另一个 PHP 文件

问题描述 投票:0回答:1

在纯 PHP 和 Apache 中是否有任何方法可以拦截对 Apache 服务器的请求的响应,然后将所有数据转发到可以进行一些后期处理的 PHP 脚本?

在上下文中,如果在生成报告的 url 中指定了查询参数

store=true
(例如 Excel、CSV),我需要一个中间件来获取响应并将其转发到另一个 php 文件,然后将其存储在服务器。

我知道我可以将检查添加到每个报告文件(有数百个不同的报告)并在那里执行保存逻辑,但如果有某种方法可以全面处理此问题,那就太好了。

我觉得我所描述的本质上是一种中间件模式,没有框架,并且处于服务器/ htaccess 级别。

php apache
1个回答
0
投票

我的解决方案,不确定它是否是最好的,但它在全球范围内有效:

我能够将

auto_prepend_file
添加到我的
.htaccess
文件,也可以添加到
php.ini
,然后调用
register_shutdown_function
以包含请求后中间件。 (如果抛出错误,或者有人打电话给
auto_append_file
die()
exit()
对我不起作用)

其工作原理如下。

.htaccess

php_value auto_prepend_file middleware/middleware_pre.php

middleware_pre.php

//First add a hook for the shutdown to run code after a request
$postMiddlewareAdded = false;
register_shutdown_function(function(){
    global $postMiddlewareAdded;
 
    if(!$postMiddlewareAdded){     
        $postMiddlewareAdded = true;
        include ($_SERVER['DOCUMENT_ROOT'] . '/middleware/middelware_post.php');
    }
});

echo "Yay. I run before every request";

middleware_post.php

echo "Yay. I run after every request.";
© www.soinside.com 2019 - 2024. All rights reserved.