在纯 PHP 和 Apache 中是否有任何方法可以拦截对 Apache 服务器的请求的响应,然后将所有数据转发到可以进行一些后期处理的 PHP 脚本?
在上下文中,如果在生成报告的 url 中指定了查询参数
store=true
(例如 Excel、CSV),我需要一个中间件来获取响应并将其转发到另一个 php 文件,然后将其存储在服务器。
我知道我可以将检查添加到每个报告文件(有数百个不同的报告)并在那里执行保存逻辑,但如果有某种方法可以全面处理此问题,那就太好了。
我觉得我所描述的本质上是一种中间件模式,没有框架,并且处于服务器/ htaccess 级别。
我的解决方案,不确定它是否是最好的,但它在全球范围内有效:
我能够将
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.";