从中间件到 return 一个 html 文件的最快方法
Fastest way to return a html file from middleware
从缓存中间件,我用它来 return 一个真正的 html 文件:
$response->getBody()->write( file_get_contents( $filePath ) );
有没有更好的方法?
我试图直接包含一个文件,但 slim 期望得到响应。
您的解决方案将是最干净的,但还有一个更快的解决方案:
readfile($filepath);
exit;
readfile
的优点是文件不会加载到内存中,而是直接写入输出缓冲区。我们也不需要让 slim 继续响应,所以我们 exit
脚本。
您也可以使用 fopen 执行此操作并初始化一个新的 Stream
,这样也不应将文件加载到内存中。
$app->add(function ($request, $response, $next) {
return $response->withBody(new \Slim\Http\Stream(fopen($filePath, 'r')));
});
注意:稍后 echo
会超出此输出缓冲区,因此此选项不如 readfile
快,但仍比您的解决方案快,因为它仅将数据加载到内存中 1x . (你的 1x 在 file_get_contents
和 1x 在 slim 响应处理)
从缓存中间件,我用它来 return 一个真正的 html 文件:
$response->getBody()->write( file_get_contents( $filePath ) );
有没有更好的方法? 我试图直接包含一个文件,但 slim 期望得到响应。
您的解决方案将是最干净的,但还有一个更快的解决方案:
readfile($filepath);
exit;
readfile
的优点是文件不会加载到内存中,而是直接写入输出缓冲区。我们也不需要让 slim 继续响应,所以我们 exit
脚本。
您也可以使用 fopen 执行此操作并初始化一个新的 Stream
,这样也不应将文件加载到内存中。
$app->add(function ($request, $response, $next) {
return $response->withBody(new \Slim\Http\Stream(fopen($filePath, 'r')));
});
注意:稍后 echo
会超出此输出缓冲区,因此此选项不如 readfile
快,但仍比您的解决方案快,因为它仅将数据加载到内存中 1x . (你的 1x 在 file_get_contents
和 1x 在 slim 响应处理)