从缓存中间件我用它来返回一个真正的html文件:
$response->getBody()->write( file_get_contents( $filePath ) );
有更好的方法吗? 我试图直接包含一个文件但苗条期望得到回复。
答案 0 :(得分:1)
您的解决方案将是最干净的,但有一个更快的解决方案:
readfile($filepath);
exit;
readfile
的优点是文件没有加载到内存中,而是直接写入输出缓冲区。此外,我们不需要让苗条继续响应,因此我们exit
脚本。
您也可以使用fopen执行此操作并初始化新的Stream
,该文件也不应将文件加载到内存中。
$app->add(function ($request, $response, $next) {
return $response->withBody(new \Slim\Http\Stream(fopen($filePath, 'r')));
});
注意:稍后修剪echo
输出缓冲区,因此此选项不如readfile
快,但仍然更快作为您的解决方案,因为它只将数据1x加载到内存中。 (在file_get_contents
处为1x,在细长响应处理处为1x)